一、联合索引失效场景
1、对(a,b,c)创建联合索引
- where b=2
- where c=3
- where b=2 and c=3
以上场景均在在a无序的情况下b、c无法有序
- where b=2 and a=4
- where b=2 and c=4 and a=3
以上场景均用上了联合索引,虽然a在条件最后,但优化器会自动调整位置
二、哪一个字段使用到了联合索引
1、对(a,b,c)创建联合索引
- where a>1 and b=2
a用到了索引,b没有用到,因为a>1时,b无序 - where a>=1 and b=2
ab都用到了索引,有可能存在a=1,b=1;a=1,b=2;a=1;b=3;此时b在a=1时有序,就用上了索引。 - where a between 2 and 8 and b = 2
ab都用到了索引,Mysql between 是包含的关系,也就是 >= 且<= - where a like ‘j%’ and b=2
ab都用到了索引,有可能存在a=j,b=1;a=j,b=2;a=j,b=3;此时b在a=j时有序,用上了索引
三、根据sql如何建立联合索引
- where a = 1 and b = 2 and c = 3;
对(a,b,c)、(b,c,a)、(c,b,a)都可以,优化器会调整顺序 - where a>1 and b=2;
对(b,a)建立索引 - where a>1 and b=2 and c>3;
对(b,a)、(b,c)建立索引 - where a=1 order by b;
对(a,b)建立索引,当a=1,b才有序 - where a in (1,2,3) and b>1;
对(a,b)建立索引,in可视为=