如果第二列对于第一列中的每个条目总是只有几个条目很长,那么多列索引通常是否值得?

Is a multi-column index generally worth it if the second column will always only have a few entries long for each entry in the first column?

如果我在 table 中有两列,并且我计划对这两列进行大量查询(通常建议创建多列索引),但我也知道每个唯一的第一列中的值在第二列中只有大约 3 到 5 个值,与仅在第一列上有索引相比,多列索引是否仍然值得?假设我不关心创建索引的成本,我对多列索引比仅第一列的索引提高查询速度的程度非常感兴趣。

问题是多列索引是否可以覆盖查询或至少覆盖 where 子句(假设您的查询指的是 where 子句中的过滤)。

总的来说,答案是肯定的。考虑如下所示的数据:

x     y       datapage
a     1       datapage_1
a     2       datapage_2
a     3       datapage_3
b     1       datapage_4
. . . 

如果您的查询是:

select x, y
from t
where x = 'a' and y = 2;

然后,在没有索引的情况下,数据库必须扫描所有数据页以找到匹配的行。

仅在 x 上建立索引,数据库可以找到所有 "a" 值,但它仍然必须加载三个数据页才能获得 y 值。

xy上都有索引,数据库可以直接到"datapage_2"。