讲师中心 微信公众号
AI工具推荐 视频效率加速

怎么判断Navicat执行计划中的索引是否最优?

秋枫小哥_1882

秋枫小哥_1882

发布时间:2026-06-14 08:07:39

|

592人浏览过

|

来源于php中文网

原创

真正健康的组合是:type为eq_ref或ref、rows接近实际返回行数、key明确指向期望索引;type=ALL且key为空说明未走索引,type=ref但rows远大于结果集表明索引选择性差或统计过期。

看 type + rows + key 三者组合是否匹配查询意图

单看某一项容易误判。比如 type 是 ref 但 rows 高达 20 万,说明索引虽然被用了,但选择性极差;又比如 key 显示用了索引,但 type 是 all,那这个 key 很可能是“摆设”(优化器实际没走它)。真正健康的组合是:type 为 eq_ref 或 ref、rows 接近实际返回行数、key 明确指向你期望的索引名。

常见错配:

  • type = ALL 且 key 为空 → 没走索引,查 WHERE 条件字段是否建索引、有无隐式转换
  • type = ref 但 rows 远大于结果集(如查 5 行却扫 8 万)→ 索引字段顺序错或统计信息过期,运行 ANALYZE TABLE 再看
  • key 有值但 possible_keys 更多 → 优化器选了次优索引,对比各索引字段覆盖度,优先保留能覆盖全部 WHERE 等值条件的联合索引

Filtered 值高但 key 为空,就是“假高效”

Filtered = 100% 不代表快,只代表服务器层没做额外过滤——但如果 key 是空的,说明存储引擎根本没用索引,全靠扫描后硬过滤,rows 就是真实扫描量。这种 100% 是“虚假繁荣”,性能瓶颈仍在 I/O。

实操判断点:

  • 先确认 key 列非空,再谈 Filtered
  • Filtered 低于 30% 且 rows 较大 → 典型“索引覆盖不全”,比如 WHERE 里用了 purchaser_id = ? AND order_status = ?,但索引只建在 purchaser_id 上,order_status 只能在回表后逐行判断
  • 想让 Filtered 有意义,必须保证所有等值条件字段都落在同一联合索引的最左前缀内

Extra 出现 Using index condition 才算索引下推生效

Using index condition 出现在 Extra 列,说明 MySQL 把部分 WHERE 条件下推到了存储引擎层执行,减少了回表次数。但它依赖两个硬条件:索引字段顺序满足最左前缀、且该索引确实被选中(key 非空)。

navicatmysql
navicatmysql

Navicat For MySQL

下载

容易忽略的细节:

  • Navicat 默认不显示 key_len,右键执行计划表格 →「显示所有列」,确认 key_len 是否大于仅匹配等值条件所需长度(例如索引是 (a,b,c),WHERE 含 a = 1 AND b > 2,key_len 应大于 a 单独长度)
  • Using where 和 Using index condition 都表示 Server 层参与过滤,但后者发生在引擎读索引时,IO 开销低得多
  • MySQL 5.6 的 ICP 支持较弱,函数包裹字段(如 DATE(col))会直接禁用 ICP,升级到 5.7+ 更稳妥

PostgreSQL 的 GIN/GIST 索引要看是否真触发位图扫描

PostgreSQL 中 key 为空、type 是 Seq Scan,基本等于 GIN/GIST 索引没生效。GIN 多表现为 Bitmap Index Scan on xxx_gin_idx + Bitmap Heap Scan 组合,GIST 则更倾向 Index Scan using xxx_gist_idx。

关键验证动作:

  • 确认 WHERE 使用了对应操作符:@@(全文)、@>(JSONB 包含)、%(相似度),而不是 = 或 LIKE 'abc%'
  • 检查索引定义是否带正确 ops:trigram 索引必须是 USING GIN (col gin_trgm_ops),缺 gin_trgm_ops 就不认
  • Rows Removed by Index Recheck 高 → 索引过滤后仍需大量回表二次判断,说明索引区分度低或数据膨胀严重
索引是否最优,不取决于它“存在”或“被选中”,而取决于它是否把 rows 压到最小、是否让 type 落在 ref/eq_ref、是否让 Extra 里的开销项(filesort/temporary)消失。所有指标都要一起看,漏掉任意一环,优化就可能落空。

热门AI工具

更多
Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

4343

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

911

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

1129

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

6261

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

3083

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

6240

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

8441

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

1150

2024.04.29

OpenJDK JVM参数怎么调优
OpenJDK JVM参数怎么调优

Java应用运行缓慢,如何调整JVM参数?本专题介绍OpenJDK JVM性能调优的基本流程,涵盖性能指标确认、运行数据采集、内存配置和垃圾回收分析,帮助你先定位瓶颈,再通过对照测试验证效果,避免直接套用参数而影响应用稳定性。

20

2026.10.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn