navicat 17 不提供索引使用率统计功能,仅显示元数据快照;需在查询窗口执行 select * from sys.schema_unused_indexes(mysql 8.0+)或结合 explain 与慢日志人工分析,其“优化表”建议仅作参考,须用执行计划验证。

Navicat 17 本身不提供索引使用率统计功能
Navicat 是数据库客户端工具,不是性能监控引擎。它不采集 Handler_read_*、innodb_buffer_pool_reads 这类运行时指标,也无法像 performance_schema 或 sys.schema_index_statistics 那样暴露索引扫描频次。你看到的“索引”列表(右键表 → “对象信息” → “索引”页签)只是元数据快照,不带任何使用热度标记。
真正能查索引是否被用上的,得靠 MySQL 原生命令
在 Navicat 中打开查询窗口,执行以下语句可定位未被使用的索引(MySQL 8.0+):
SELECT * FROM sys.schema_unused_indexes;
这个视图依赖 performance_schema 的启用,若返回空或报错,请确认:
-
performance_schema已开启(SHOW VARIABLES LIKE 'performance_schema';返回ON) - 你有
SELECT权限访问sys库(部分部署中sys视图被禁用) - 数据库已运行足够长时间(该视图只统计自上次重启以来的活动)
对于 MySQL 5.7 或更低版本,只能手动结合 EXPLAIN 和慢日志分析:
EXPLAIN SELECT * FROM orders WHERE user_id = 123 AND status = 'paid';
重点看 key 字段是否命中预期索引,rows 是否明显偏大,type 是否为 range/ref 而非 ALL。
Navicat 可辅助生成索引建议,但需谨慎对待
Navicat 17 的“优化表”功能(右键表 → “优化表”)会调用 ANALYZE TABLE 并显示“建议添加的索引”,其逻辑基于当前 WHERE/ORDER BY/JOIN 子句的静态模式匹配,不考虑查询频率、数据倾斜或覆盖索引收益。常见误判包括:
- 为低基数列(如
gender、is_deleted)推荐单列索引 - 忽略已有复合索引的前缀匹配能力(例如已有
(a,b,c),却建议(a,b)) - 未识别隐式类型转换导致索引失效(如
WHERE phone = 13800138000对字符串字段)
这类建议仅作起点参考,务必用 EXPLAIN 验证实际执行计划。
想持续追踪索引效果,得跳出 Navicat
真实线上环境需要长期观测,推荐组合手段:
- 开启慢查询日志(
slow_query_log=ON),配合pt-index-usage工具解析 - 定期导出
information_schema.STATISTICS+performance_schema.table_io_waits_summary_by_index_usage(MySQL 8.0.22+)做趋势对比 - 用
sys.dm_db_index_usage_stats(SQL Server)或pg_stat_all_indexes(PostgreSQL)——注意 Navicat 连接不同数据库时底层机制完全不同
Navicat 的价值在于快速执行和查看结果,而不是替代数据库自身的诊断能力。把索引分析当成一个“数据库内务”,而非“客户端功能”,才能避开最深的坑。











