gpt4 book ai didi

mysql - 对于不同基数列的复合索引,顺序重要吗?

转载 作者:太空宇宙 更新时间:2023-11-03 11:32:05 25 4
gpt4 key购买 nike

对于使用复合 b 树索引的所有列的查询
SELECT * from customers where gender = 'M' AND date_of_birth < '2000-01-01'

有区别吗
CREATE INDEX low_then_high ON customer (gender, date_of_birth);
CREATE INDEX high_then_low ON customer (date_of_birth, gender);

类似的问题是How to pair low/high cardinality columns as composite indexes?但接受的答案没有解释推荐背后的原因。

我问的是 MySQL,但我猜答案适用于任何 b 树索引。

最佳答案

没有。多列中的基数 INDEXes不要紧。但是,列的使用确实很重要。

索引中的第一列需要使用 = 进行测试.在那之后,你会在一个“范围”处得到一个裂缝,比如 <BETWEEN . IN处于灰色区域,有时会像 = 一样进行优化,有时像一个范围。

更具体地说,对于 where gender = 'M' AND date_of_birth < '2000-01-01' , 基数无关紧要

(gender, date_of_birth) -- will use both columns.
(date_of_birth, gender) -- will ignore `gender` and not be as efficient.

同样,请注意,由于 =,您提供的链接与您的情况相同与 < .

我在 Cookbook 中进一步讨论了这些问题.

我在 Higher cardinality column first in an index when involving a range? 中进一步讨论了这个问题

关于mysql - 对于不同基数列的复合索引,顺序重要吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48985975/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com