mysql:请问列 a 有普通索引,列 b,c 是一个组合索引. where a = xx and b= xx and c=xx 会用上索引吗?

2020-03-26 09:38:57 +08:00
 Newyorkcity
有且仅有这两个索引.
如果列 a 的索引变为主键索引或者唯一索引,会有不同吗?

谢谢
1656 次点击
所在节点    问与答
7 条回复
lhx2008
2020-03-26 09:40:20 +08:00
只会用 a 索引,没不同
lhx2008
2020-03-26 09:47:18 +08:00
看错了,应该要看优化器怎么选用哪一个
ylsc633
2020-03-26 09:53:47 +08:00
题目里 是看优化器

详情里 a 变成主键 走 a
fareware
2020-03-26 09:53:53 +08:00
explain
ylsc633
2020-03-26 09:54:29 +08:00
Jooooooooo
2020-03-26 11:12:13 +08:00
看优化器

还有可能走两个索引的交叉(但并不一定会更快)
auxox
2020-03-26 11:29:32 +08:00
主要看优化器选择哪一条执行路径。a 和 b,c 这两个索引哪个散粒度更高,优化器大概率会选择用哪一个。但是还要考虑顺序 IO 和随机 IO 的问题,如果索引不是聚簇的,那么 rdbms 在检索数据的时候需要回表,造成大量的随机 IO,极端情况下还不如全表扫描来得快

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/656256

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX