组合索引是否适用于仅针对一列的查询?

问题描述 投票:0回答:3

我正在使用 PostgreSQL。我不确定如果我有一个组合索引,例如在列

A
B
上,当我仅查询
B
时,是否会使用索引?

sql postgresql indexing
3个回答
2
投票

到目前为止,两个答案都是不正确。索引可以在任何情况下使用。

多列索引中的列顺序是相关的。特别是在 B-tree 索引(这是默认值)中。 GiN 或 GiST 索引的行为不同。

前导列的查询非常高效。附加列的唯一缺点:索引的大小不断增加。自 Postgres 13 添加了索引重复数据删除以来,这种效果更加明显。请参阅下面的第二个链接。

Postgres 可以甚至可以使用多列索引来执行忽略前导列的查询条件。不过,第一列中的不同值越多,该用例的效率就越低。 参见:

    PostgreSQL 中索引的工作
  • 复合索引也适合第一个字段的查询吗?

1
投票
A

上的条件,但不仅仅用于

B
。 这样的索引将用于以下(示例)情况:

where A = 1 where A < 10 where A = 1 and B = 2 where A = 1 and B < 10

它不会用于:

where B = 2 where B < 10

对于以下内容,它仅用于 
A

条件(如果有的话):


where A < 10 and B = 2 where A < 10 and B < 10

我碰巧认为 MySQL 
文档

在解释复合索引方面做得很好。 (忽略特定于 MySQL 实现的哈希索引的详细信息。)


0
投票

http://www.postgresql.org/docs/current/static/indexes-bitmap-scans.html

© www.soinside.com 2019 - 2024. All rights reserved.