explain 可以查看 SQL 执行计划,但是无法知道它为什么做这个决策,如果想确定多种索引方案之间是如何选择的或者排序时选择的是哪种排序模式。从 MySQL 5.6 开始,可以使用 trace 查看优化器如何选择执行计划。通过trace,能够进一步了解为什么优化器选择A执行计划而不是选择B执行计划,或者知道某个排序使用的排序模式,帮助我们更好地理解优化器行为。
set session optimizer_trace="enabled=on",end_markers_in_json=on; ‐‐开启trace
set session optimizer_trace=“enabled=off”; ‐‐关闭trace
SELECT * from user WHERE name like '张三%' ORDER BY code limit 100;
SELECT * FROM information_schema.OPTIMIZER_TRACE;
分析trace中的执行计划。可以有效分析建的索引为什么没有走。查看优化器如何选择执行计划,获取每个可能的索引选择的代价。
TRACE 字段中整个文本大致分为三个过程。
准备阶段:对应文本中的 join_preparation
优化阶段:对应文本中的 join_optimization
执行阶段:对应文本中的 join_execution
使用时,重点关注优化阶段和执行阶段。
索引字段会作用在查询和排序时,有排序字段时考虑跟查询一块建立组合索引