(1)查询const和ref:
假设 SQL : select * from table where id =x 或者 select * from table where name=x 的语句,直接可以通过聚簇索引或者二级索引回源,查到需要的数据,这种根据索引直接
可以快速查询数据的过程,在执行计划里称之为 const,意思是性能超高的常量级,所以在执行计划看到const时,就是直接通过索引定位到数据,速度极快,这是const的意思。
但是有一个要点,二级索引必须是唯一索引,才是属于const方式,也就是必须建立unique key唯一索引,保证二级索引的每个值都是唯一的才可以。如果是一个普通的二级索引呢?就是一个
的KEY索引,这个时候在写一个select from table where name=x 的语句,name是个普通二级索引,不是唯一索引,那么这种查询也是很快的,在执行计划里叫 ref。如果是包含多个列的
普通索引的话,那么必须是从索引最左侧开始连续都是等值比较才是属于ref方式,就是类似 select from table where name =x and age=x and xx=xx,然后索引可能是 KEY(name,age,xx)
一个例外,如果用name is null 这种语法,即使name是主键或唯一索引,还是只能走ref,但是如果针对一个二级索引同时还比较了一个值还有限定了 is null,类似于 select from
table where name =x or name is null ,那么此时执行计划 叫做 ref_or_null, 就是二级索引里搜你要的值以及是NULL的值,然后再回源去聚簇索引里查,因为同时有索引等值比较和NULL值查询
,就叫做 ref_or_null 。
知识点:聚簇索引和唯一索引 如果有 is not null/ is null 的这种也是 ref
知识点:innodb的聚簇索引选择主键,唯一键非空 rowid默认分配,如果唯一索引页不是聚簇索引则需要进行回表查询。
知识点:直接通过聚簇索引 或者 唯一索引+聚簇索引回表都是const级别
*知识点:如果普通索引字段可以为null值,索引还是可以生效的。