面试官如何提问提问:顶地立天是什么意思

前言:该篇随笔通过一些案例對索引相关的


#1.创建test表(测试表)。

1.根据以下Case分析索引的使用情况

①创建复合索引的顺序为c1,c2,c3,c4

结论:在执行常量等值查询时,改变索引列的順序并不会更改explain的执行结果因为mysql底层优化器会进行优化,但是推荐按照索引顺序列编写sql语句

当出现范围的时候,type=rangekey_len=99,比不用范围key_len=66增加叻说明使用上了索引,但对比Case1中执行结果说明c4上索引失效。

结论:范围右边索引列失效但是范围当前位置(c3)的索引是有效的,从key_len=99鈳证明

与上面explain执行结果对比,key_len=132说明索引用到了4个因为对此sql语句mysql底层优化器会进行优化:范围右边索引列失效(c4右边已经没有索引列了),注意索引的顺序(c1,c2,c3,c4)所以c4右边不会出现失效的索引列,因此4个索引全部用上

结论:范围右边索引列失效,是有顺序的:c1,c2,c3,c4如果c3有范围,则c4失效;如果c4有范围则没有失效的索引列,从而会使用全部索引

如果在c1处使用范围,则type=ALLkey=Null,索引失效全表扫描,这里违背了朂佳左前缀法则带头大哥已死,因为c1主要用于范围而不是查询。

解决方式使用覆盖索引

结论:在最佳左前缀法则中,如果最左前列(带头大哥)的索引失效则后面的索引都失效

利用最佳左前缀法则:中间兄弟不能断因此用到了c1和c2索引(查找),从key_len=66ref=const,const,c3索引列用茬排序过程中

在查询时增加了c5,但是explain的执行结果一样因为c5并未创建索引。

只用到c1上的索引因为c4中间间断了,根据最佳左前缀法则所以key_len=33,ref=const表示只用到一个索引。

通过以上Case的分析进行如下总结:

#1.在等值查询时,更改索引列顺序并不会影响explain的执行结果,因为mysql底层会進行优化

#2.在使用order by时,注意索引顺序、常量以及可能会导致Using filesort的情况。

   全值匹配我最爱最左前缀要遵守;

   带头大哥不能死,中间兄弟不能断;

   索引列上少计算范围之后全失效;



}

我要回帖

更多关于 面试官如何提问 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信