8.8.1 使用 EXPLAIN 优化查询

EXPLAIN 语句提供了有关 MySQL 如何执行语句的信息:

  • EXPLAIN 适用于 SELECTDELETEINSERTREPLACEUPDATE 语句。
  • EXPLAIN 与可解释的语句一起使用时,MySQL 会显示来自优化器的有关语句执行计划的信息。也就是说,MySQL 解释了它将如何处理该语句,包括关于表如何连接以及按何种顺序连接的信息。有关使用 EXPLAIN 获取执行计划信息的信息,请参阅 8.8.2 EXPLAIN 输出格式 。
  • EXPLAINFOR CONNECTION connection_id 而不是可解释的语句一起使用时,它会显示在命名连接中执行的语句的执行计划。参见 8.8.4 为指定连接获取执行计划信息 。
  • 对于 SELECT 语句,EXPLAIN 生成可以使用 SHOW WARNINGS 显示的其他执行计划信息。参见 8.8.3 EXPLAIN 扩展输出格式 。
  • EXPLAIN 对于检查涉及分区表的查询非常有用。参见 24.3.5 获取分区信息 。
  • FORMAT 选项可用于选择输出格式。TRADITIONAL表格格式显示输出。如果没有 FORMAT 选项,这是默认设置。JSON 格式以 JSON 格式显示信息。

EXPLAIN 的帮助下,您可以看到应该在哪里向表添加索引,以便通过使用索引查找行来更快地执行语句。您还可以使用 EXPLAIN 来检查优化器是否以最佳顺序联接表。要提示优化器使用与 SELECT 语句中表的顺序相对应的联接顺序,请以 SELECT STRIGHT_JOIN 而不仅仅是 SELECT 为该语句开头。(请参见 13.2.13 SELECT 语句)但是,STRIGHT_JOIN 可能会阻止索引的使用,因为它会禁用半联接转换。参见 8.2.2.1 使用半联接转换优化 INEXISTS 子查询谓词 。

优化器跟踪有时可以提供与 EXPLAIN 的信息互补的信息。但是,优化器跟踪(信息)的格式和内容可能会在不同版本之间发生变化。有关详细信息,请参见 MySQL 内部:跟踪优化器 。

如果您在认为应该使用索引的情况下没有使用索引,则运行 ANALYZE TABLE 来更新表统计信息,例如键的基数,这可能会影响优化器所做的选择。参见 13.7.3.1 ANALYZE TABLE 语句 。

注释
EXPLAIN 还可以用于获取有关表中列的信息。EXPLAIN tbl_nameDESCRIBE tbl_nameSHOW COLUMNS FROM tbl_name 同义。有关更多信息,请参阅 13.8.1 DESCRIBE 语句 和 13.7.7.5 SHOW COLUMNS 语句 。

你可能感兴趣的:(《MySQL,8.0,参考手册》中文翻译,#,第,8,章,优化,mysql,数据库,sql,执行计划,优化)