• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

详解 MySQL 5.7 优化:Explain 执行计划

mysql 搞代码 4年前 (2022-01-09) 18次浏览 已收录 0个评论

mysql视频教程栏目介绍Explain 执行计划

推荐(免费):mysql视频教程

目录

  • 1. 介绍
  • 2. Explain 结果列详解
    • 2.1 id
    • 2.2 select_type
    • 2.3 table
    • 2.4 partitions
    • 2.5 type(非常重要)
    • 2.6 possible_keys
    • 2.7 key
    • 2.8 key_len
    • 2.9 ref
    • 3.10 rows
    • 2.11 filtered
    • 2.12 Extra

【注】

  • 当前系统环境: MySQL 5.7,其他版本略有不同,后期会抽时间单独说明。
  • 只介绍常见的场景,其他少见的场景暂不研究,如有需要可以去官方文档中查找。
  • 非入门,需要对 MySQL 的底层数据结构 B+ 树有一定的了解。

文档参考:
MySQL 官方 Explain 文档

1. 介绍

使用 EXPLAIN 关键字可以模拟优化器执行 SQL 语句,并分析查询语句的性能瓶颈。

2. Explain 结果列详解

2.1 id

  • id 列的编号是 select 的序列号,一般有几个 select 就有几个 id(联表查询会有重复的 id),并且 id 的顺序是按 select 出现的顺序增长的。
  • id 越大则表示执行的优先级越高,id 相同(一般出现在联表查询)则从上往下执行,idNULL 最后执行。

2.2 select_type

select_type 表示对应行是简单的还是复杂的查询。常见的值有:

  • simple:简单查询,查询不包含子查询和union。

  • primary:复杂查询中最外层的 select 。

  • subquery:包含在 select 中的子查询(不在 from 子句中)

  • derived:包含在 form 子句中的子查询,MySQL 会将结果放在一个临时表中,也称为派生表。

  • union:在 union 中的第二个或之后的 select。

【注】在 MySQL 5.7 中,会对衍生表进行合并优化,如果要直观的查看 select_type 的值,需要临时关闭该功能(默认是打开的),下面的介绍中凡是涉及到衍生表的都需要该操作

# 关闭衍生表的合并优化(只对该会话有效)set session optimizer_switch='derived_merge=off'; # 打开衍生表的合并优化(只对该会话有效)set session optimizer_switch='derived_merge=on';

2.3 table

对应行查询的表。

【注】

  • 本文来源[email protected]搞@^&代*@码网(from 子句中有子查询时,table 列为是 <derivenN> 的格式,表示这一行的执行的是 id = N 行的查询。
  • 当有 union 时,table 的数据为 <union M,N> 的格式,M 和 N 表示参与 unionselectid

2.4 partitions

未完待续。。。

2.5 type(非常重要)

  • type 表示这行查询的关联类型(访问类型,或查询类型),通过该值可以了解该行查询数据记录的大概范围。
  • 常见的值依次从最优到最差分别为:system > const > eq_ref > ref > range > index > ALL;一般我们要保证效率的话,要优化我们的语句至少使其达到 range 级别,如果可能的话做好优化到 refrange 一般用于范围查找,所以换句话说除了范围查找,其他的查询语句我们最好是优化到 ref 级别。

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:详解 MySQL 5.7 优化:Explain 执行计划

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址