(转)MySQL执行计划解读

原创
小哥 2年前 (2023-05-23) 阅读数 36 #大杂烩

转自:http://www.cnblogs.com/ggjucheng/archive/2012/11/11/2765237.html

Explain语法

EXPLAIN SELECT …… 变体: 1. EXPLAIN EXTENDED SELECT …… 将执行计划反编译为SELECT语句,正在运行SHOW WARNINGS 可得到被MySQL优化器优化的查询语句 2. EXPLAIN PARTITIONS SELECT …… 对于分区表EXPLAIN

执行计划中包含的信息

id

包含一组指示查询中执行的数字select子句或操作表的顺序

id相同,执行顺序从上到下

如果是子查询,id的序列号将增加,id值越高,优先级越高,执行时间越早

id如果它们相同,则可以将它们视为一个组并按从上到下的顺序执行;在所有组中,id值越高,优先级越高,先执行

select_type

表示每个select子句的类型(简单 OR复杂)

a.SIMPLE:查询不包括子查询或UNION

b.如果查询包含任何复杂的子部分,则最外层的查询将标记为:PRIMARY

c.在SELECT或WHERE列表中包含了子查询,该子查询标记为:SUBQUERY

d.在FROM列表中包含的子查询标记为:DERIVED(衍生)

e.若第二个SELECT出现在UNION之后,它被标记为UNION;若UNION包含在  FROM在子句的子查询中,外层SELECT将标记为:DERIVED

f.从UNION表获取结果SELECT标记为:UNION RESULT

type

表示MySQL在表中查找所需行的方法,也称为“访问类型”,通常按如下方式使用:

从左到右,从最差到最好

a.ALL:Full Table Scan, MySQL将遍历整个表以查找匹配的行

b.index:Full Index Scan,index与ALL区别为index类型仅遍历索引树

c.range索引范围扫描,从某个点开始,返回与值范围匹配的行,常见于between、<、>等的查询

range不同形式的索引访问性能差异的访问类型不同

d.ref非唯一性索引扫描返回与单个值匹配的所有行。通常用于使用非唯一索引的非唯一前缀(即唯一索引)进行查找

e.eq_ref:唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配。在主键或唯一索引扫描中常见

f.const、system:当MySQL优化查询的一部分并将其转换为常量时,请使用这些类型的访问。如果主键位于where列表中,MySQL可以将查询转换为常量

system是const类型的一种特殊情况,当查询的表只有一行时, 使用system

g.NULL:MySQL在优化期间分解语句,甚至在执行期间甚至不访问表或索引

possible_keys

指出MySQL哪个索引可用于查找表中的行?如果查询中涉及的字段上有索引,则会列出该索引,但查询不一定会使用它

key

显示MySQL如果未使用索引,则查询中使用的实际索引显示为NULL

TIPS如果在查询中使用覆盖索引,则它仅出现在key列表中

key_len

指示索引中使用的字节数,可用于计算查询中使用的索引的长度

key_len显示的值是索引字段的最大可能长度,而不是实际使用的长度,即key_len基于表定义计算,而不是从表中检索

ref

表示上表的联接匹配条件,哪些列或常量用于查找索引列上的值

在此示例中,key_len可知t1表的idx_col1_col2充分利用,col1匹配t2表的col1,col2匹配一个常数,即 ’ac’

rows

表示MySQL根据表统计信息和索引选择,估计查找所需记录需要读取的行数

Extra

包含不适合在其他列中显示但很重要的其他信息

a.Using index

此值表示相应的select操作中使用的覆盖索引(Covering Index)

TIPS:覆盖索引(Covering Index)

MySQL索引可用于返回select列表中的字段,而无需根据索引再次读取数据文件

包含满足查询要求的所有数据的索引称为 覆盖索引 (Covering Index)

注意:

如果要使用覆盖索引,请务必注意它select只有必需的列才会从列表中删除,并且不能select *如果所有字段都索引在一起,则会导致索引文件太大,查询性能下降

b.Using where

表示MySQL服务器在存储引擎收到记录(Post-filter),

如果查询无法使用索引,Using where它的目的只是提醒我们MySQL将用where用于筛选结果集的子句

c.Using temporary

表示MySQL需要使用临时表来存储结果集,常见于排序和分组查询

d.Using filesort

MySQL使用 索引 无法完成的排序操作称为“文件排序”

MySQL执行计划的限制

•EXPLAIN我不会告诉你触发器、存储过程或用户定义函数对查询的影响

•EXPLAIN不考虑各种因素Cache

•EXPLAIN不能显示MySQL查询执行期间完成的优化工作

部分统计信息是估计的,不准确

•EXPALIN只能解释SELECT操作,其他操作需要重写为SELECT稍后查看执行计划

最后

本文由简朝阳本人推荐ppt转换为网络版本,原始版本ppt下载: 下载地址

原文链接 http://isky000.com/database/mysql-explain-detail

版权声明

所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除

热门