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