using index,索引覆盖。什么是索引覆盖呢?就是,查询的列都在索引里面可以找到,这样就不用去数据库里面查找了。性能全表扫描高。如果这里用到了where条件,那么条件必须是索引的前缀列。============**从索引里面查数据**
using where,查询的列没有被索引覆盖,并且where 的条件非索引的前缀列。注意,这个必须有where条件!!!!毕竟是using where嘛,没有where条件怎么叫using where?=========**没有从索引里面查数据**
using where,using index: 查询的列被索引覆盖,且where条件非索引前缀列。如果是前缀列,就成了using index了。表达的意思是通过索引覆盖没办法查到所有数据,必须通过表才行。这里的查数据要深刻理解,查数据包括两部分,在哪里查,通过什么条件查。虽然有索引覆盖数据可以通过索引取出,可是查询条件不再索引中,或没办法走索引取数据。======**从索引取数据,但是没有从索引里面查数据**
null ,查询的列没有被索引覆盖,但是where条件是索引前缀列。这样的情况下,using index不合适,因为查询的字段没有从索引里面取。using where也不合适,因为where条件么有走索引是 using where,而这里没有using where,所以是走了索引的。====**没有从索引取数据,但是从索引查数据**
using index condition,首先排除using index索引覆盖。查询的肯定不是索引覆盖的字段,另外不是using where,说明where的条件不是前缀列,不然就是null了。如果没有where条件,比如select * from 表 ,那么也是null。所以肯定有where条件,where条件要是前缀的话就成了null了。也不对,那就一个sql查询的字段没有索引覆盖,有where条件但是条件不是前缀列。那是什么?有条件但是不是前缀的话就成了using where了。答案是,未被索引覆盖,where条件是前缀列,但是是前缀列 的范围查询。就是说前缀列使用了大于小于等符号。
using temporary,使用了临时表来处理数据。这里讲一下临时表和衍生查询,衍生查询侧重的是查询,查询的表来自于select产出的表,不是直接查找数据库的表。临时表是经过处理的表,比如group by,distinct 等。
using filesort,文件排序。这里说明没有走索引排序
explain之extra
最新推荐文章于 2023-02-03 23:41:38 发布