mark一下联合索引、最左匹配的知识,还有联合索引的一些实战题
最左匹配
讲联合索引,一定会提到最左匹配!
所谓最左原则指的就是:如果你的 SQL 语句中用到了联合索引中的最左边的索引,那么这条 SQL 语句就可以利用这个联合索引去进行匹配,值得注意的是,当遇到范围查询(>、<、between、like)
就会停止匹配。
假设,我们对(a,b)
字段建立一个索引,也就是说,你where
后条件为
a = 1
a = 1 and b = 2
是可以匹配索引的。你执行
b= 2 and a = 1
也是能匹配到索引的,因为Mysql有优化器会自动调整a,b
的顺序与索引顺序一致。
相反的,你执行
b = 2
就匹配不到索引了。
而你对(a,b,c,d)
建立索引,where
后条件为
a = 1 and b = 2 and c > 3 and d = 4
那么,a,b,c
三个字段能用到索引,而d
就匹配不到。因为遇到了范围查询!
最左匹配的原理?
假设,我们对(a,b)
字段建立索引,那么入下图所示