MySQL执行计划解读

Explain语法

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

 

行计划包含的消息

图片 1

 

id

含一组数字,表示查询中实施select子句或操作表的次第

 

图片 2

id相同,执行各个由臻顶下

 

图片 3

使是分支查询,id的序号会递增,id值越怪优先级更强,越先被实施

 

图片 4

id如果一致,可以认为是如出一辙组,从达到通往生相继执行;在具备组中,id值越老,优先级更强,越先执行

 

select_type 

表示查询中每个select子句的门类(简单 OR复杂)

 

图片 5

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在表中找到所需行的法,又如“访问类型”,常见类型如下:

 

图片 6

鉴于左到右,由最差及最好好

 

a.ALL:Full Table Scan, MySQL将遍历全表以寻找到相当的实践

 

图片 7

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

 

图片 8

c.range:索引范围扫描,对索引的扫描开始给某平等触及,返回匹配值域的实施,常见于between、<、>等之询问

图片 9

图片 10

 

range看类型的异款型之目访问性能差异

图片 11

 

d.ref:非唯一性索引围观,返回匹配有单独值的保有执行。常见于采用非唯一索引即唯一索引的非唯一前缀进行的找

 

图片 12

 

 

图片 13

图片 14

 

e.eq_ref:唯一性索引围观,对于每个索引键,表中不过生同样修记下和的配合。常见于主键或唯一索引围观

图片 15

 

f.const、system:当MySQL对查询有有进行优化,并转移为一个常量时,使用这些类别看。如以主键置于where列表中,MySQL就会将拖欠查询转换为一个常量

图片 16

system是const类型的特例,当查问的表明只来一行的景象下, 使用system

 

 

g.NULL:MySQL在优化过程中讲语句,执行时甚至不用访问表或索引

 

图片 17

 

possible_keys

 

指出MySQL能以谁索引在表中找到实践,查询涉及到之字段上如有索引,则该索引将为排有,但不肯定让询问利用

 

key

显示MySQL在询问中实际使用的目录,若没采取索引,显示为NULL

TIPS:查询中一经以了盖索引,则该索引才出现在key列表中

图片 18

 

key_len

代表找引中利用的字节数,可透过该列计算查询中运用的目的长短

图片 19

 

图片 20

key_len显示的值为索引字段的最好特别或长度,并非实际应用长度,即key_len是依据表定义计算而得,不是经表内检索出的

 

ref

代表上述表底连日匹配原则,即什么列或常量被用来查找索引列上之值

 

图片 21

本例中,由key_len可知t1表的idx_col1_col2给充分行使,col1匹配配t2表底col1,col2相当配了一个常量,即
’ac’

 

 

rows

表示MySQL根据表统计信息和索引选用情况,估算的找到所急需的记录所要读取的行数

 

图片 22

 

Extra

包含无称当另列中显示但生重点的额外信息

 

a.Using index

 

该值表示相应的select操作着行使了盖索引(Covering Index)

 

图片 23

 

TIPS:覆盖索引(Covering Index)

 

MySQL可以运用索引返回select列表中之字段,而毋庸根据目录再次读取数据文件

 

带有有满足查询需要之数的目录称为 蒙索引(Covering Index)

 

注意:

若果假定使用覆盖索引,一定要留意select列表中只有取出要之排,不可select
*,因为一旦用富有字段一起做索引会导致索引文件了十分,查询性能降低

 

b.Using where

 

意味着MySQL服务器在储存引擎受到记录后开展“后过滤”(Post-filter),

倘查询不能动用索引,Using
where的企图只是提醒我们MySQL将据此where子句来过滤结果集

 

图片 24

 

c.Using temporary

 

意味着MySQL需要以临时表来囤积结果集,常见于排序和分组查询

 

图片 25

图片 26

 

d.Using filesort

 

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

 

图片 27

 

图片 28

 

图片 29

 

图片 30

 

MySQL执行计划的受制

 

•EXPLAIN不见面报告您至于触发器、存储过程的信或者用户从定义函数对查询的影响事态

•EXPLAIN不考虑各种Cache

•EXPLAIN不能够形MySQL在实践查询时所作的优化办事

•部分统计信息是量的,并非精确值

•EXPALIN只能讲SELECT操作,其他操作而又写吧SELECT后翻看执行计划

网站地图xml地图