底层原理
当有多列索引时,mysql底层使用索引查询的时候是从左往右进行匹配,并且是需要从左往右连续的。
示例
如:索引顺序是a、b、c,当查询条件为a = 1
或 a = 1 and b = 1
时将会使用到索引,但是当查询条件为b = 1
或 b= 1 and c = 1
将不会使用上索引
多了索引创建示例
如有一个2列索引(a,b)
,则在a
,(a,b)
上会建立索引
如有一个3列索引(a,b,c)
,则会在a
,(a,b)
,(a,b,c)
上建立索引
mysql查询示例:
如有索引a
,b
// 全匹配
select * from test where a = 1 and b = 1;
// 最左前缀匹配
select * from test where a = 1;
注意
理论上索引对顺序是敏感的,但是由于MySQL的查询优化器会自动调整where子句的条件顺序以使用适合的索引,例如我们将where中的条件顺序颠倒:
select * from test where b = 1 and a = 1;
的效果与如下sql是一样的:
select * from test where a = 1 and b = 1;