我正在使用PostgreSQL。我不确定如果我有一个组合索引,比如列A
和B
,当我只查询B
时,是否会使用索引?
答案 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)