(1)查询range:
比如SQL select from table where age>=x and age <= x ,假设age就是一个普通索引,此时必然利用索引进行范围筛选,一旦利用索引做范围筛选,那这种方式就是 range,一般走索引问题都不是太大,除非通过范围查询出来的数据量太大。
*(2)特殊的访问方式:直接查询二级索引字段不需要回表的访问方式, type 类型 index
type 为 index 类型,比较索引 (x1,x2,x3),我们写一个SQL语句,select x1,x2,x3 from table where x2=xxx, 这样x2不是联合索引的最左侧的那个字段,这种执行计划的类型是index类型,内部执行就是 遍历索引树的叶子节点,联合索引的叶子节点存放的也是页,页面是普通索引值和主键值,所以针对这个SQL,会直接遍历key(x1,x2,x3)索引树的叶子节点的那些页,直到找到x2=xxx的那个数据,就把里面的x1,x2,x3三个字段的值直接提取出来就可以了,这个遍历二级索引的过程,要比遍历聚簇索引快很多,二级索引的叶子节点就包含几个字段的值,比聚簇索引叶子节点小多了,所以速度也快。
也就是说,此时只需要遍历一个 key(x1,x2,x3)索引就可以了,不需要回溯到聚簇索引去,针对这种只要遍历二级索引就可以拿到想要的数据,而不需要回溯到聚簇索引访问的方式叫index index速度比 const,ref,range 速度差一点。因为要走遍历二级索引树的叶子节点的方式来执行,比基于索引树的二分查找要慢多了,但是比全表扫描好一些。
(3)ALL查询:
all意思是直接全表扫描,扫描聚簇索引的所有叶子节点,也就是表里一行行数据扫描。
type 类型 const,ref/ref null,range,index,all