mysql中的extra是什么意思_mysqlexplain中的type列含义和
extra列的含义
很多朋友在⽤mysql进⾏调优的时候都肯定会⽤到explain来看select语句的执⾏情况,这⾥简单介绍结果中两个列的含义。
1 type列
官⽅的说法,说这列表⽰的是“访问类型”,更通俗⼀点就是:mysql到需要的数据⾏的⽅式。⼀下就是从效率最差到最好顺序分别介绍下:
All 这个就是所谓的全表扫描,没有⽤到任何的index,mysql就是从头到尾把整个表遍历⼀边,到所需要的数据⾏。效率是最差的。如下图,这个表中的usertype不是索引,这个查询中没有⽤到任何索引,所以就出现了全表扫描的结果。
java中index是什么意思index type列中出现了index,含义仅仅是局限在扫描全表的顺序是按照索引顺序扫描的,仅仅是按索引顺序去扫描的。它的有点是避免了排序,因为索引就是已经排序好的,缺点就是要承担按照索引次序读
取整张表的开销。如下,这个查询中order by id,id是这个表的索引,但是因为没有在where中出现任何的索引列,所以它也只是索引顺去扫描了全表。(这⾥强调⼀下,你的查询语句中where条件中没有索引,只是order by 的时候⽤了index,⽽且没有⽤limit限制,type这⾥显⽰的是all,也就是这种情况下没有limit,还是扫⾯全表的)
range 这个⼀般就是在你的where语句中出现了between或者“>”这种符号的时候会出现这个。这种范围扫描索引扫描⽐全表扫描要好,因为它只需要开始于索引的某⼀点,⽽结束语另⼀点,不⽤扫描全部索引。
ref 这也是⼀种索引访问,它返回所有匹配某个单独值的⾏,然⽽,它可能会到多个符合条件的⾏,所以他应该属于查和扫描的混合体。
const,system 当mysql能对查询的部分就⾏优化,并且转换成⼀个常量的时候,它就会使⽤这种访问类型了。⽐如你把⼀⾏的主键当做where条件放进去,那mysql就可以把它转换成⼀个常量,然后查询。如下图:uid是主键,作为where条件就能出现这个效率最⾼的查询结果。
2 extra列
extra列中出现的信息⼀般不是太重要,但是还是有很多信息我们可以从这⾥⾯获取到:
using index:出现这个说明mysql使⽤了覆盖索引,避免访问了表的数据⾏,效率不错!
using where:这说明服务器在存储引擎收到⾏后将进⾏过滤。有些where中的条件会有属于索引的列,当它读取使⽤索引的时候,就会被过滤,所以会出现有些where语句并没有在extra列中出现using where这么⼀个说明。
using temporary:这意味着mysql对查询结果进⾏排序的时候使⽤了⼀张临时表。
using filesort:这个说明mysql会对数据使⽤⼀个外部的索引排序,⽽不是按照表内的索引顺序进⾏读取。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论