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 语句

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

独上西楼影三人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值