MySQL之EXPLAIN中type列和extra列的含义

文章目录

type列

MySQL找到数据行的方式,即访问类型。效率从最差到最好的顺序如下:

  • ALL
    全表扫描,没有用到任何的索引,这是一种非常原始的查找方法,非常的耗时二号抵消。
  • index
    这种类型只是另一种形式的全部扫描,只不过它的扫描顺序是按照索引的顺序,然后根据索引回表取数据。和All相比,他们都是取得了全表的数据,而且index要先读索引再回表取数据。
    如果连接类型为type,而且extra列中的值为‘Using index’,那么称这种情况为索引覆盖
  • rang
    rang指的是有范围的索引扫描,相交于index的全索引扫描,它有范围限制,因此要优于index。
    它是基于索引的,表示WHERE条件中出现了BETWEEN AND、>、 <、 IN、OR
  • ref
    查找条件使用索引而且不为主键或unique。表示虽然使用了索引,但该索引列的值不唯一,有重复。这样即使使用索引找到了第一条数据,仍然需要进行目标值附近的小范围扫描,但它的好处是不用全表扫描。
    -ref_eq
    进行精确查询,结果集唯一,表示使用了主键或唯一性索引查找的情况。
  • const,system
    当MySQL能对查询部分进行优化,并且转换为一个常量。比如,where条件使用主键查询。

extra列

这一列包含的是不在其他列显示的额外信息。

  • using index
    这个说明MySQL使用覆盖索引,避免了回表操作,效率不错。
  • using where
    服务器在存储引擎收到行后会进行过滤。即会根据查询条件过滤结果集。
    这表示服务器在存储引擎返回行以后再应用WHERE过滤条件。
  • using file sort
    表示排序的时候没有用到索引,不得不采取其他方式排序。排序方法有内存排序,在临时文件排,采用双路排序法,或者是采用整行排序等,using file sort并没有说是那些排序方法。
  • using temporay
  • 表示用到了一张临时表,至于临时表是在内存中还是在磁盘上就不知道了。

猜你喜欢

转载自blog.csdn.net/java852987/article/details/83272544
今日推荐