首页/数据/数据库速查/判断索引是否真的被用上
SQL 语法52 条

判断索引是否真的被用上

三步确认:EXPLAIN 看 key 命中、优化器 trace 看选择理由、索引使用统计确认长期效果;建了不用的索引只会拖慢写入。

数据库速查数据更新于 2026-10-12
用途索引有效性验证
工具EXPLAIN / optimizer_trace / sys.schema_unused_indexes
注意8.0 统计持久化

优化器追踪

优化器追踪
SET optimizer_trace = 'enabled=on';
SELECT * FROM orders WHERE user_id=42 ORDER BY created_at DESC LIMIT 10;
SELECT * FROM information_schema.OPTIMIZER_TRACE\G
SET optimizer_trace = 'enabled=off';

未使用索引盘点

未使用索引盘点
SELECT * FROM sys.schema_unused_indexes;
SELECT * FROM sys.schema_redundant_indexes;
OPTIMIZER_TRACE 输出很大(含每个候选索引的代价估算),只在定位「为什么不用某个索引」时短时开启。

易错点

  • schema_unused_indexes 基于启动以来的统计,实例重启后归零,结论别下得太早
  • 强制索引 USE INDEX 是临时手段,索引本身不被优化器信任时先修数据分布或统计

数据来源与参考

  • MySQL 8.0 Reference Manual: Optimizer Trace

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌