这是一个好问题.
在第四次的explain sql时,注意看一个与前三次不同的细节.
如图,我用蓝色标出来的部分.
type这一列,从ref变成了range.
先来回顾下type的作用.
它显示了连接使用了哪种类别,有无使用索引.
从最好到最差的连接类型为: const > eq_reg > ref > range > indexhe > ALL
再来看看ref这一列的作用.
它显示使用哪个列或常数与key一起从表中选择行。
在第一条到第三条sql时,Mysql查询优化器在比较 ref & range 的代价的时候,ref 的代价更小,所以选择的是ref.
在第四条sql时,ref 与 range 使用的是相同的索引,ref key 的使用的长度小于 range 的长度,则优先使用 range。
另外:
索引并没有失效,第四条sql依然使用到了复合索引. |