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_nameDESCRIBE 和 tbl_nameSHOW COLUMNS FROM 。有关更多信息,请参阅 第 15.8.1 节,“DESCRIBE 语句” 和 第 15.7.7.6 节,“SHOW COLUMNS 语句”。tbl_name