mysql 查询执行计划_mysql8 参考手册--了解查询执行计划,使用EXPLAIN优化查询

根据表,列,索引的详细信息以及WHERE子句中的条件,MySQL优化器考虑了许多技术来有效执行SQL查询中涉及的查找。无需读取所有行即可执行对巨大表的查询;可以执行涉及多个表的联接,而无需比较行的每个组合。优化器选择执行最有效查询的一组操作称为“ 查询执行计划 ”,也称为 EXPLAIN计划。您的目标是认识到 EXPLAIN 表示查询优化的计划,如果发现一些低效的操作,则可以学习SQL语法和索引技术来改进计划。

使用EXPLAIN优化查询

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

1、EXPLAIN作品有 SELECT, DELETE, INSERT, REPLACE,和 UPDATE语句。

2、当EXPLAIN与可解释的语句一起使用时,MySQL将显示来自优化器的有关语句执行计划的信息。也就是说,MySQL解释了它将如何处理该语句,包括有关如何连接表以及以何种顺序连接表的信息。有关 EXPLAIN用于获取执行计划信息的信息,请参见第8.8.2节“ EXPLAIN输出格式”。

3、当EXPLAIN与 而不是可解释的语句一起使用时,它将显示在命名连接中执行的语句的执行计划。请参见第8.8.4节“获取命名连接的执行计划信息”。 FOR CONNECTION connection_id

4、对于SELECT语句, EXPLAIN产生可以使用来显示的其他执行计划信息 SHOW WARNINGS。请参见 第8.8.3节“扩展的EXPLAIN输出格式”。

5、EXPLAIN对于检查涉及分区表的查询很有用。请参见 第23.3.5节“获取有关分区的信息”。

6、FORMAT选项可用于选择输出格式。TRADITIONAL以表格格式显示输出。如果不FORMAT存在任何选项,则为默认设置 。 JSONformat以JSON格式显示信息。

在EXPLAIN的帮助下,您可以看到应该在表中添加索引的位置,以便通过使用索引查找行来使语句更快地执行。您还可以 EXPLAIN用来检查优化器是否以最佳顺序联接表。要提示优化器使用连接顺序,该连接顺序与SELECT语句中表的命名顺序相对应,请以 SELECT STRAIGHT_JOIN而不是just 开头SELECT。(请参见 第13.2.10节“ SELECT语句”。)但是,STRAIGHT_JOIN由于它禁用了半联接转换,因此 可能会阻止使用索引。看到 第8.2.2.1节“使用半联接转换优化IN和EXISTS子查询谓词”。

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

如果您在认为应该使用索引时遇到问题,请运行ANALYZE TABLE以更新表统计信息,例如键的基数,这可能会影响优化器的选择。请参见 第13.7.3.1节“ ANALYZE TABLE语句”。

注意

EXPLAIN还可用于获取有关表中列的信息。EXPLAIN tbl_name与DESCRIBE tbl_name同义,并显示来自tbl_name的列。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值