文章目录
- 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
- 表示用到了一张临时表,至于临时表是在内存中还是在磁盘上就不知道了。