MySQL执行计划

MySQL执行计划

ColumnMeaning
idThe SELECT identifier
select_typeThe SELECT type
tableThe table for the output row
partitionsThe matching partitions
typeThe join type
possible_keysThe possible indexes to choose
keyThe index actually chosen
key_lenThe length of the chosen key
refThe columns compared to the index
rowsEstimate of rows to be examined
filteredPercentage of rows filtered by table condition
extraAdditional information
id

select查询的序列号,包含一组数字,表示查询中执行select子句或者操作表的顺序。

  1. 如果id相同,那么执行顺序从上到下
  2. 如果id不同,如果是子查询,id的序号会递增,id值越大优先级越高,越先被执行
  3. id相同和不同的,同时存在:相同的可以认为是一组,从上往下顺序执行,在所有组中,id值越大,优先级越高,越先执行
select_type
select_type ValueMeaning
SIMPLESimple SELECT (not using UNION or subqueries)
PRIMARYOutermost SELECT
UNIONSecond or later SELECT statement in a UNION
DEPENDENT UNIONSecond or later SELECT statement in a UNION, dependent on outer query
UNION RESULTResult of a UNION.
SUBQUERYFirst SELECT in subquery
DEPENDENT SUBQUERYFirst SELECT in subquery, dependent on outer query
DERIVEDDerived table
UNCACHEABLE SUBQUERYA subquery for which the result cannot be cached and must be re-evaluated for each row of the outer query
UNCACHEABLE UNIONThe second or later select in a UNION that belongs to an uncacheable subquery (see UNCACHEABLE SUBQUERY)

simple:简单的查询,不包含子查询和Union

primary:查询中若包含任何复杂的子查询,最外层查询则被标记为primary

union:若第二个select出现在union之后,则被标记为union

dependent union:跟union类似,此处的dependent表示union或union all联合而成的结果会受外部表影响

union result:从union表获取结果的select

subquery:在select或者where列表中包含子查询

dependent subquery:subquery的子查询要受到外部表查询的影响

derived:from子句中出现的子查询,也叫作派生类

uncacheable subquery:表示使用子查询的结果不能被缓存

uncacheable union:表示union的查询结果不能被缓存

table

对应行正在访问哪一个表,表名或者别名,可能是临时表或者union合并结果集

  1. 如果是具体的表名,则表明从实际的物理表中获取数据,当然也可以是表的别名
  2. 表名是derived N的形式,表示使用了id为N的查询产生的衍生表
  3. 当有union result的时候,表名是 union n1,n2等的形式,n1,n2表示参与union的id
type

type显示的是访问类型,访问类型表示是以何种方式去访问数据。效率从最好到最坏依次是:

system > const > eq_ref > ref > range > index > all

all: 遍历全表来找匹配的行

index:index与all区别为index类型只遍历索引树

range:只检索给定范围的行,使用一个索引来选择行

ref:使用了非唯一性索引进行数据的查找

eq_ref:类似ref,区别就在使用的索引是唯一索引,对于每个索引键值,表中只有一条记录匹配,简单来说,就是多表连接中使用primary key或者unique key作为关联条件

const、system:当mysql对查询某部分进行优化,并转换为一个常量时,使用这些类型访问。

possible_keys

显示可能应用在这张表中的索引,一个或多个,查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询实际使用

key

实际使用的索引

key_len

表示索引中使用的字节数,可以通过key_len计算查询中使用的索引长度,在不损失精度的情况下长度越短越好

ref

显示索引的哪一个列被使用了

rows

根据表的统计信息及索引使用情况,大致估算出找出所记录需要读取的行数。

extra

包含额外的信息

  1. using filesort:说明mysql无法利用索引进行排序,只能利用排序算法进行排序,会消耗额外的位置
  2. using temporary:建立临时表保存中间结果,查询完成之后把临时表删除
  3. using index:这个表示当前的查询是覆盖索引的,直接从索引中读取数据。
  4. using where:使用where进行条件过滤
  5. using join buffer:使用连接缓存
  6. impossible where:where语句的结果总是false
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值