mysql 在使用联合索引时会有一个最优左前缀的一个原则
其实就是 where条件后跟随的多个条件字段使用复合索引的一个规则(引用别人的一句话:带头大哥不能死,中间兄弟不能断)
比如 user表 字段 id name age salary 创建复合索引 (name age salary )
当创建(a,b,c)复合索引时,相当于创建了(a)单列索引,(a,b)组合索引以及(a,b,c)组合索引
想要索引生效的话,只能使用 a和a,b和a,b,c三种组合
1.有带头大哥
select * from user where name='qiaofeng' and age= 28 and salary = 11000
此时是走索引的
2.有带头大哥,有中间兄弟
select * from user where name='qiaofeng' and age= 28
此时是走索引的
3.有带头大哥,没有中间兄弟
select * from user where name='qiaofeng' and and salary = 11000
此时只有name字段走索引的, 而salary不走索引
4.没有带头大哥
select * from user where age= 28 and and salary = 11000
此时是没有匹配索引的
另外,where后条件字段顺序不按照索引顺序 也是没问题的,因为mysql 在查询时会自动根据字段的最大化的匹配索引
select * from user where age= 28 and name='qiaofeng' 也是走索引的
本文解析了MySQL中联合索引的'带头大哥'和'中间兄弟'原则,探讨了在where条件中不同组合对索引利用的影响,以及where条件顺序调整对索引选择的灵活性。通过实例说明了如何最大化复合索引的效益。
10万+

被折叠的 条评论
为什么被折叠?



