HarmonyOS 7 / API 26 RDB 查询变慢怎么查:索引设计、查询条件和 explain 检查怎么拆
HarmonyOS 7 / API 26 RDB 查询变慢怎么查索引设计、查询条件和 explain 检查怎么拆RDB 查询慢很多时候不是数据库本身慢而是查询条件和索引没对上。HarmonyOS 7.0.0 / API 26 项目里如果列表页、搜索页、历史记录页都开始查本地库索引设计就不能靠感觉。这篇只拆一个问题RDB 查询变慢时怎么确认该不该建索引、索引字段顺序怎么定、查询语句有没有真正命中索引。运行环境和检查范围项目取值系统版本HarmonyOS 7.0.0满足 HarmonyOS 5.0.0 及以上范围API 版本API 26工程模型Stage 模型开发语言ArkTS数据能力RDB 本地关系型数据库验证目标查询条件和索引匹配慢查询能被复现和解释问题一般怎么发生坏例子通常是页面查得越来越多但表结构还是最初那一版constsqlSELECT * FROM recipe WHERE category ? AND updated_at ? ORDER BY updated_at DESCconstcursorawaitrdbStore.querySql(sql,[hot,String(lastTime)])如果表里没有合适索引这条查询数据少时没感觉数据一多就会变成全表扫描。用户看到的就是页面打开慢、搜索慢、筛选后列表卡住。先用脚本把坏索引挡住我会先用检查脚本确认四件事有没有索引计划、查询条件是否和索引顺序匹配、有没有 explain 检查、迁移失败能不能回滚。constcases[{name:bad-rdb-index-check,hasIndexPlan:false,verifiesQueryCondition:false,hasExplainCheck:false,hasRollbackPlan:false},{name:good-rdb-index-normal,hasIndexPlan:true,verifiesQueryCondition:true,hasExplainCheck:true,hasRollbackPlan:true},{name:good-rdb-index-boundary,hasIndexPlan:true,verifiesQueryCondition:true,hasExplainCheck:true,hasRollbackPlan:true},];functioninspect(item){consterrors[];if(!item.hasIndexPlan)errors.push(index plan is missing);if(!item.verifiesQueryCondition)errors.push(query condition does not match index);if(!item.hasExplainCheck)errors.push(explain check is missing);if(!item.hasRollbackPlan)errors.push(rollback plan is missing);return{...item,passed:errors.length0,errors};}本地验证结果是 3 个用例里 2 个通过、1 个失败。失败项就是没有索引计划、没有 explain 检查的写法。{total:3,passed:2,failed:1}第一层先从查询场景反推索引不要看到字段就建索引。先看页面到底怎么查。比如常见场景是按分类过滤再按更新时间倒序展示。constlistSqlSELECT id, title, category, updated_at FROM recipe WHERE category ? ORDER BY updated_at DESC LIMIT ? OFFSET ?constargs[hot,20,0]这个查询更适合组合索引先 category再 updated_at。awaitrdbStore.executeSql(CREATE INDEX IF NOT EXISTS idx_recipe_category_updated ON recipe(category, updated_at DESC))字段顺序要跟查询条件贴近。category 是等值过滤updated_at 是排序字段这样组合起来比单独给每个字段建索引更有意义。第二层索引升级也要进迁移索引不是随便启动时建一下就完事。它属于数据库结构的一部分也要跟 schemaVersion 走。asyncfunctionmigrateV2ToV3(rdbStore:relationalStore.RdbStore){awaitrdbStore.beginTransaction()try{awaitrdbStore.executeSql(CREATE INDEX IF NOT EXISTS idx_recipe_category_updated ON recipe(category, updated_at DESC))awaitsaveSchemaVersion(rdbStore,3)awaitrdbStore.commit()}catch(error){awaitrdbStore.rollBack()throwerror}}这样做的好处是索引创建失败不会把版本号错误推进到 v3。下次启动还能继续修复而不是卡在一个假成功状态。第三层用 explain 或查询计划验证建了索引不等于命中了索引。发布前要验证查询计划至少确认关键 SQL 没有继续全表扫描。constexplainSqlEXPLAIN QUERY PLAN SELECT id, title FROM recipe WHERE category ? ORDER BY updated_at DESC LIMIT 20constcursorawaitrdbStore.querySql(explainSql,[hot])while(cursor.goToNextRow()){constdetailcursor.getString(cursor.getColumnIndex(detail))if(detail.includes(SCAN recipe)){thrownewError(recipe query still scans full table)}}cursor.close()如果查询计划里还是 SCAN大概率是索引顺序、查询条件或排序方式没有对上。两个用例怎么验第一个用例是普通分页查询。准备 5000 条数据按分类筛选并按更新时间排序确认查询计划命中组合索引。第二个用例是索引迁移失败。故意让创建索引时抛错确认事务回滚schemaVersion 不能被写成新版本。方案对比方案好处风险发现慢了再随手建索引快字段顺序容易错迁移不可控每个字段都单独建索引看起来全面写入变慢查询未必命中查询场景反推组合索引再用 explain 验证最稳需要补迁移和验证脚本我会选第三种。索引不是越多越好而是要刚好匹配页面的查询方式。最后怎么避免再出问题以后新增列表筛选、搜索、排序时我会同步补三件事关键 SQL、索引迁移、查询计划检查。没有 explain 结果的索引优化只能算猜测不能算真正完成。

相关新闻

工业激光标刻设备怎么选?五维能力框架看穿真功夫

工业激光标刻设备怎么选?五维能力框架看穿真功夫

所谓激光标刻,就是用高能量密度的激光束在材料表面刻写永久性标识——从汽车VIN码到电子元器件序列号,从医疗器械UDI码到航空零部件追溯码。看似"只是打个标",实则是精密激光加工能力的入门考试。一台激光标刻机能做好,…

2026/8/6 14:15:54 阅读更多 →
距离滔搏失去耐克,还剩5个月

距离滔搏失去耐克,还剩5个月

距离滔搏全面终止耐克产品在中国内地的线上销售,只剩不到5个月。7月22日,滔搏公告称,从2027年1月1日起,公司在中国内地的耐克产品线上平台销售将全面终止。消息公布当天,滔搏市值单日蒸发28亿港元。公告显示&#xff0…

2026/8/6 11:19:32 阅读更多 →
Unity二次元角色渲染实战:ILM贴图与描边融合技术详解

Unity二次元角色渲染实战:ILM贴图与描边融合技术详解

1. 项目概述:二次元角色渲染的挑战与核心思路做二次元风格的角色渲染,尤其是用Unity,听起来挺酷,但真上手了就会发现到处都是坑。从模型导入那一刻起,光照不对、描边穿帮、阴影生硬、高光诡异……各种问题层出不穷&…

2026/8/6 12:26:49 阅读更多 →

最新新闻

在VS Code中配置PowerShell 7为默认终端:提升开发效率的完整指南

在VS Code中配置PowerShell 7为默认终端:提升开发效率的完整指南

1. 项目概述:为什么是 PowerShell 7 与 VS Code 的强强联合?如果你是一名在 Windows 平台上深耕的开发或运维工程师,那么对 PowerShell 一定不陌生。从 Windows 7 时代内置的 PowerShell 2.0 到如今,它早已不是那个只能执行简单脚…

2026/8/7 3:33:03 阅读更多 →
终极免费macOS窗口置顶工具Topit:彻底告别多窗口遮挡烦恼 [特殊字符]

终极免费macOS窗口置顶工具Topit:彻底告别多窗口遮挡烦恼 [特殊字符]

终极免费macOS窗口置顶工具Topit:彻底告别多窗口遮挡烦恼 🚀 【免费下载链接】Topit Pin any window to the top of your screen / 在Mac上将你的任何窗口强制置顶 项目地址: https://gitcode.com/gh_mirrors/to/Topit 还在为macOS上多个窗口互相…

2026/8/7 3:33:03 阅读更多 →
USB-C快充协议不匹配导致主板烧毁:原理、诊断与预防指南

USB-C快充协议不匹配导致主板烧毁:原理、诊断与预防指南

这次我们来看一个硬件安全相关的技术问题:充电器混用导致主板烧毁。这不是危言耸听,而是真实发生在不少用户身上的硬件故障。对于技术爱好者和普通用户来说,理解其背后的原理、掌握预防和排查方法,远比事后维修更有价值。核心问题…

2026/8/7 3:33:03 阅读更多 →
前端开发进阶:从布局交互到AI赋能的全链路实战指南

前端开发进阶:从布局交互到AI赋能的全链路实战指南

1. 从“切图仔”到“架构师”:前端开发者的价值跃迁之路最近和一位老同事聊天,他儿子去年刚毕业,学的是前端开发,进了一家不错的互联网公司。结果今年公司业务调整,整个前端团队被裁撤,他儿子现在很迷茫&am…

2026/8/7 3:33:03 阅读更多 →
Unity实时肢解系统Limb Hacker:基于物理切割的网格分割原理与实战

Unity实时肢解系统Limb Hacker:基于物理切割的网格分割原理与实战

1. 项目概述与核心价值如果你正在开发一款动作、射击或者带有战斗元素的游戏,尤其是那种追求爽快感、打击感的作品,那么角色的“物理反馈”绝对是一个绕不开的课题。想象一下,玩家一枪命中敌人的手臂,对方只是身体晃了晃&#xff…

2026/8/7 3:33:03 阅读更多 →
VMware虚拟机中解决macOS Apple ID双重认证问题

VMware虚拟机中解决macOS Apple ID双重认证问题

1. 问题现象与背景解析在VMware虚拟机环境中运行macOS系统时,不少用户会遇到"您的Apple ID目前无法使用双重认证"的提示。这个看似简单的登录问题,实际上涉及虚拟机环境、苹果账户安全策略和系统配置多个层面的复杂交互。我最近在帮团队搭建ma…

2026/8/7 3:32:02 阅读更多 →

日新闻

为什么scrcpy成为Android投屏的终极解决方案:完整实战指南

为什么scrcpy成为Android投屏的终极解决方案:完整实战指南

为什么scrcpy成为Android投屏的终极解决方案:完整实战指南 【免费下载链接】scrcpy Display and control your Android device 项目地址: https://gitcode.com/GitHub_Trending/sc/scrcpy 想要将Android手机屏幕完美投射到电脑上,享受大屏操作的自…

2026/8/7 0:00:19 阅读更多 →
如何在5分钟内掌握Tom Select:打造现代化表单选择器的终极指南

如何在5分钟内掌握Tom Select:打造现代化表单选择器的终极指南

如何在5分钟内掌握Tom Select:打造现代化表单选择器的终极指南 【免费下载链接】tom-select Tom Select is a lightweight (~16kb gzipped) hybrid of a textbox and select box. Forked from selectize.js to provide a framework agnostic autocomplete widget wi…

2026/8/7 0:00:19 阅读更多 →
5分钟快速上手:NSZ压缩工具终极指南,轻松管理Switch游戏文件

5分钟快速上手:NSZ压缩工具终极指南,轻松管理Switch游戏文件

5分钟快速上手:NSZ压缩工具终极指南,轻松管理Switch游戏文件 【免费下载链接】nsz NSZ - Homebrew compatible NSP/XCI compressor/decompressor 项目地址: https://gitcode.com/gh_mirrors/ns/nsz 你是否在为Nintendo Switch游戏文件占用大量存储…

2026/8/7 0:00:19 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/6 22:02:27 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/6 22:02:27 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/6 22:02:27 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/5 23:28:39 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/6 22:02:28 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/5 23:46:51 阅读更多 →