EXPLAIN
语句提供有关 MySQL 如何执行语句的信息
当
EXPLAIN
与可解释语句一起使用时,MySQL 会显示来自优化器有关语句执行计划的信息。也就是说,MySQL 解释了它将如何处理该语句,包括有关如何连接表以及以何种顺序连接表的信息。有关使用EXPLAIN
获取执行计划信息的信息,请参见 第 10.8.2 节,“EXPLAIN 输出格式”。当
EXPLAIN
与FOR CONNECTION
而不是可解释语句一起使用时,它会显示在命名连接中执行的语句的执行计划。请参见 第 10.8.4 节,“获取命名连接的执行计划信息”。connection_id
对于
SELECT
语句,EXPLAIN
会生成其他执行计划信息,可以使用SHOW WARNINGS
显示这些信息。请参见 第 10.8.3 节,“扩展 EXPLAIN 输出格式”。EXPLAIN
对于检查涉及分区表的查询很有用。请参见 第 26.3.5 节,“获取有关分区的的信息”。FORMAT
选项可用于选择输出格式。TRADITIONAL
以表格格式呈现输出。如果没有FORMAT
选项,则这是默认值。JSON
格式以 JSON 格式显示信息。
借助 EXPLAIN
,您可以看到应该在哪些表中添加索引,以便通过使用索引查找行来使语句更快地执行。您还可以使用 EXPLAIN
检查优化器是否以最佳顺序连接表。要提示优化器使用与在 SELECT
语句中命名的表的顺序相对应的连接顺序,请在语句开头使用 SELECT STRAIGHT_JOIN
,而不是仅仅使用 SELECT
。(请参见 第 15.2.13 节,“SELECT 语句”。)但是,STRAIGHT_JOIN
可能会阻止使用索引,因为它会禁用半连接转换。请参见 使用半连接转换优化 IN 和 EXISTS 子查询谓词。
优化器跟踪有时可能会提供与 EXPLAIN
相补充的信息。但是,优化器跟踪格式和内容在不同版本之间可能会发生变化。有关详细信息,请参见 MySQL 内部:跟踪优化器。
如果您遇到了索引在您认为应该使用的情况下未使用的的问题,请运行 ANALYZE TABLE
来更新表统计信息,例如键的基数,这些统计信息可能会影响优化器做出的选择。请参见 第 15.7.3.1 节,“ANALYZE TABLE 语句”。
EXPLAIN
也可以用于获取有关表中列的信息。 EXPLAIN
等同于 tbl_name
DESCRIBE
和 tbl_name
SHOW COLUMNS FROM
。有关更多信息,请参阅 第 15.8.1 节,“DESCRIBE 语句” 和 第 15.7.7.6 节,“SHOW COLUMNS 语句”。tbl_name