合并索引是否仅适用于一列的查询?

时间:2014-05-10 04:12:18

标签: sql postgresql indexing

我正在使用PostgreSQL。我不确定如果我有一个组合索引,比如列AB,当我只查询B时,是否会使用索引?

3 个答案:

答案 0 :(得分: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 documentation在解释复合索引方面做得很好。 (忽略特定于MySQL实现的哈希索引的细节。)

答案 1 :(得分:1)

到目前为止,这两个答案都不正确。无论如何都可以使用索引

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

前导列上的查询非常有效。附加列的唯一缺点是:索引的规模不断扩大。

Postgres 可以甚至将多列索引用于忽略前导列的查询条件。但是,该用例效率低得多

我们已经在dba.SE上详细讨论过这个问题:
Working of indexes in PostgreSQL
Is a composite index also good for queries on the first field?

答案 2 :(得分:0)

答案是否定的,他们在这里解释。

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