有一题面试题 求解

发布于 2022-09-11 20:26:08 字数 104 浏览 23 评论 0

上题:

图片描述
求解: 以及为什么……? 谢谢!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

尤怨 2022-09-18 20:26:08

最基础的就是联合索引的规则和最左优先原则了,
1.用到a,b字段;
2.用不上索引
3.用到a字段;
4.用到a字段,in条件走不走索引需要考虑mysql版本
5.用到a,b字段,优化器会处理并能够使用到最左前缀原则,同时索引支持范围查询

详细的建议看文档 - 优化与索引,或者 我推荐的Mysql的小册,索引一章超极详细

梦在深巷 2022-09-18 20:26:08

这个联合索引拆开来是三个索引
(a) (a,b) (a,b,c)
(1)走(a,b)
(2)不走索引,这个就好比一个楼梯,第一楼没了,你怎么上二楼呢?
(3)走(a)
(4)走(a),题目中说了a的区分度很高,根据成本代价计算,按道理in里面两个值优化器是会选择走到(a)索引
(5)走(a,b)先根据a定位好然后再根据b去走range

十年九夏 2022-09-18 20:26:08

1,3,分别用2和1个字段,联合索引有个左前缀匹配规则
index(a,b,c)能够匹配的就是:
a
a b
a b c

陌路黄昏 2022-09-18 20:26:08

能用到索引的选项:
(1),用到a,b字段;
(3),用到a字段;
(4),用到a字段;
(5),用到a,b字段。

旧时模样 2022-09-18 20:26:08

这个是设计到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=?
这个会用到哪些索引呢?
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文