对于如上SQL,只是因为查询字段不同,最终执行时选择的索引就不同,那么MySQL是如何决定选择使用哪个索引呢?
答案是MySQL会进行成本计算,对于各个场景查询进行成本预估,最终选择最优。
我们可以使用trace工具查看MySQL成本计算过程
- 开启trace
set session optimizer_trace="enabled=on",end_markers_in_json=on;
- 关闭trace,默认关闭
set session optimizer_trace="enabled=on",end_markers_in_json=on;
- 查看trace
#执行sqlselect * from employees where name > 'a';
#查看trace
SELECT * FROM information_schema.OPTIMIZER_TRACE;