abc 联合索引查 bc 走不走索引

2020-03-24 08:31:52 +08:00
 gssong

abc 联合索引查 bc 走不走索引 我觉得按照最左前缀匹配不走,可是面试官说走,说看看 MySQL 内部优化啥的,有没有大佬解答一下

9559 次点击
所在节点    MySQL
56 条回复
find
2020-03-24 08:38:17 +08:00
不走
Guozi1989
2020-03-24 08:39:43 +08:00
印象中是不走的 坐等大佬解答
OysterQAQ
2020-03-24 08:39:48 +08:00
索引下推
2379920898
2020-03-24 08:40:27 +08:00
前缀索引 了解下
dilu
2020-03-24 08:47:39 +08:00
不走
假设列 a:1 2 3 4 5 6
列 b: a b c d e f
列 c: X Y Z W T
以 abc 为维度建立联合索引,真实的索引是这样的
(1a) (1b) ... (4a) .... (1aW) (1aT) ....
并且 B 树数第一层节点存储与内存中
xiaxiaocao
2020-03-24 08:51:21 +08:00
看怎么定义"走不走"了,非前缀匹配的情况下,MySQL 虽然无法直接用联合索引定位,但是可以全部扫描索引,也算是一种使用吧,总比扫表要好。
qloog
2020-03-24 09:00:51 +08:00
必然不走
labulaka521
2020-03-24 09:01:47 +08:00
abc ab a 的走
skymei
2020-03-24 09:05:57 +08:00
前缀原则,不走
baozijun
2020-03-24 09:18:02 +08:00
不走
xiaxiaocao
2020-03-24 09:23:29 +08:00
我再回复一次吧,我想面试官可能要问的是类似覆盖索引这种情况,不一定是用索引树直接定位,但是可以扫描整个索引,这种也算"用到索引"了
xkeyideal
2020-03-24 09:26:28 +08:00
B+树走最左匹配
ic2y
2020-03-24 09:31:04 +08:00
baozijun
2020-03-24 09:32:43 +08:00
abc,如果 a,b,c 都有索引的话,即 idx_a_b_c,也就是索引按照 a->b->c 的排序方式形成 B+树,可以使用 a and b and c,依次走 a b c 的索引. 如果只是 a c 不走 b 的话只走 a 的索引,因为 a 值符合条件的话会接着走 b,如果没有 b 就没法接着走下去.
yuhuigreed
2020-03-24 09:39:19 +08:00
最左前缀匹配原则,abc 建索引的时候是基于先 a,然后基于 b 、c 有序的,查询时候想走上索引得也按照这个顺序,bc 是走不上索引的
fancy111
2020-03-24 09:40:17 +08:00
一群人瞎几把猜,跑一次不就知道了?
ABC 索引查 BC 的时候虽然没有用到最左侧索引覆盖,但是还是走的索引。extra 显示是 using where 。
RRRoger
2020-03-24 09:41:02 +08:00
加个字段 col_reverse, 存 cba [旺柴]
skymei
2020-03-24 09:47:11 +08:00
SELECT * FROM tbl_name WHERE col1=val1;
SELECT * FROM tbl_name WHERE col1=val1 AND col2=val2;

SELECT * FROM tbl_name WHERE col2=val2;
SELECT * FROM tbl_name WHERE col2=val2 AND col3=val3;

If an index exists on (col1, col2, col3), only the first two queries use the index. The third and fourth queries do involve indexed columns, but do not use an index to perform lookups because (col2) and (col2, col3) are not leftmost prefixes of (col1, col2, col3).
ahsjs
2020-03-24 09:53:06 +08:00
避免打脸,explain 跑一次,b,c type 为 ALL 明细全表了,还叫用索引?
dovme
2020-03-24 09:57:23 +08:00
这个代表走了还是没走?
https://sm.ms/image/PKq9yu8QGxtv7s3

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

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

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

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

© 2021 V2EX