5. 通过 TRACE 分析优化器如何选择执行计划

MySQL 5.6 提供了对 SQL 的跟踪 TRACE,通过 TRACE 文件能够进一步了解为什么优化器选择 A 执行计划而不选择 B 执行计划,帮助我们更好地理解优化器的行为。

使用方式:首先打开 TRACE,设置格式为 JSON,设置 TRACE 最大能够使用的内存大小,避免解析过程中因为默认内存过小而不能够完整显示。

mysql> SET OPTIMIZER_TRACE = "enabled=on", END_MARKERS_IN_JSON = ON;

接下来执行想做 TRACE 的 SQL 语句:

SELECT rental_id
FROM rental
WHERE 1 = 1
  AND rental_date >= '2005-05-25 04:00:00'
  AND rental_date <= '2005-05-25 05:00:00'
  AND inventory_id = 4466;

最后,检查 INFORMATION_SCHEMA.OPTIMIZER_TRACE 就可以知道 MySQL 是如何执行 SQL 的:

SELECT *
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;

上述过程只能在 mysql 的命令行客户端中执行,可视化 IDE 工具无法得到准确结果!

最后更新于