示例表
表结构
测试数据
不同的索引选择
我们用一个查询语句来做示例,同样的查询条件,仅仅是查询参数的不同。
全表扫描示例
覆盖索引示例
走索引示例
可以看到,上述3种情况,MySQL 选择了不同的查询方案。
mysql最终选择是否走索引或者一张表涉及多个索引最终选择哪个索引,我们可以用 trace 工具来一查究竟。
trace介绍
用法
开启 trace 工具会影响 MySQL 性能,所以只能临时分析 sql 使用,使用后应该立即关闭。
使用trace工具查看语句:
结果分析
上述 json 结果中给出大部分关键字段的注释,可以看到当前执行语句,MySQL 分析全表扫描比走索引查询的成本 cost 更低,所以选择了全表扫描。