上题:
求解: 以及为什么……? 谢谢!
最基础的就是联合索引的规则和最左优先原则了,1.用到a,b字段;2.用不上索引3.用到a字段;4.用到a字段,in条件走不走索引需要考虑mysql版本5.用到a,b字段,优化器会处理并能够使用到最左前缀原则,同时索引支持范围查询
详细的建议看文档 - 优化与索引,或者 我推荐的Mysql的小册,索引一章超极详细
这个联合索引拆开来是三个索引(a) (a,b) (a,b,c)(1)走(a,b)(2)不走索引,这个就好比一个楼梯,第一楼没了,你怎么上二楼呢?(3)走(a)(4)走(a),题目中说了a的区分度很高,根据成本代价计算,按道理in里面两个值优化器是会选择走到(a)索引(5)走(a,b)先根据a定位好然后再根据b去走range
1,3,分别用2和1个字段,联合索引有个左前缀匹配规则index(a,b,c)能够匹配的就是:aa ba b c
能用到索引的选项:(1),用到a,b字段;(3),用到a字段;(4),用到a字段;(5),用到a,b字段。
这个是设计到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=? 这个会用到哪些索引呢?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
暂无简介
文章 0 评论 0
接受
发布评论
评论(5)
最基础的就是联合索引的规则和最左优先原则了,
1.用到a,b字段;
2.用不上索引
3.用到a字段;
4.用到a字段,in条件走不走索引需要考虑mysql版本
5.用到a,b字段,优化器会处理并能够使用到最左前缀原则,同时索引支持范围查询
详细的建议看文档 - 优化与索引,或者 我推荐的Mysql的小册,索引一章超极详细
这个联合索引拆开来是三个索引
(a) (a,b) (a,b,c)
(1)走(a,b)
(2)不走索引,这个就好比一个楼梯,第一楼没了,你怎么上二楼呢?
(3)走(a)
(4)走(a),题目中说了a的区分度很高,根据成本代价计算,按道理in里面两个值优化器是会选择走到(a)索引
(5)走(a,b)先根据a定位好然后再根据b去走range
1,3,分别用2和1个字段,联合索引有个左前缀匹配规则
index(a,b,c)能够匹配的就是:
a
a b
a b c
能用到索引的选项:
(1),用到a,b字段;
(3),用到a字段;
(4),用到a字段;
(5),用到a,b字段。
这个是设计到mysql索引的最左原则。
mysql的索引为什么是执行的最左原则的,是由于索引就是B+树,而联合索引实际上也是一棵B+树,是按左到右的顺序排序的,所以搜索的时候会从左到右。
针对题目的答案:
1、where a=? and b=?
2、where b=? and c=?
3、where a=? and c=?
4、where b=? and a in (?,?)
5、where b > ? and c=? and a=?
PS: