1. 以MySQL单表查询为例看看执行计划包含哪些内容
-
假设有一个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,