上题:
求解: 以及为什么……? 谢谢!
这个联合索引拆开来是三个索引
(a) (a,b) (a,b,c)
(1)走(a,b)
(2)不走索引,这个就好比一个楼梯,第一楼没了,你怎么上二楼呢?
(3)走(a)
(4)走(a),题目中说了a的区分度很高,根据成本代价计算,按道理in里面两个值优化器是会选择走到(a)索引
(5)走(a,b)先根据a定位好然后再根据b去走range
这个是设计到mysql索引的最左原则。
mysql的索引为什么是执行的最左原则的,是由于索引就是B+树,而联合索引实际上也是一棵B+树,是按左到右的顺序排序的,所以搜索的时候会从左到右。
针对题目的答案:
1、where a=? and b=?
会使用到 a 和 b 的索引
2、where b=? and c=?
不会用到任何索引
3、where a=? and c=?
会使用到索引 a,不会用到索引 c
4、where b=? and a in (?,?)
不会用到索引
5、where b > ? and c=? and a=?
不会用到索引
PS:
针对这个题目,还会有一种情况,给你思考一下?
where a=? and b>? and c=?
这个会用到哪些索引呢?
6 回答5k 阅读✓ 已解决
4 回答13.4k 阅读✓ 已解决
5 回答7.8k 阅读✓ 已解决
2 回答7.5k 阅读✓ 已解决
2 回答6.7k 阅读✓ 已解决
3 回答1.7k 阅读✓ 已解决
1 回答5.2k 阅读✓ 已解决
最基础的就是联合索引的规则和最左优先原则了,
1.用到a,b字段;
2.用不上索引
3.用到a字段;
4.用到a字段,in条件走不走索引需要考虑mysql版本
5.用到a,b字段,优化器会处理并能够使用到最左前缀原则,同时索引支持范围查询
详细的建议看文档 - 优化与索引,或者 我推荐的Mysql的小册,索引一章超极详细