在几列上使用索引

时间:2010-07-16 11:32:11

标签: sql postgresql

如果我在列上建立了一个btree索引(一,二,三,四,五) 它将用于查询where block:

(1) ... WHERE one = 1 AND two = 2 AND three = 3 AND four = 4 -- no five

(2) ... WHERE two = 2 AND one = 1 -- wrong sequence, no five

(3) ... WHERE one = 1 AND three = 3 AND two = 2 AND five = 5 AND four = 4 -- wrong sequence

2 个答案:

答案 0 :(得分:1)

在所有情况下都是,因为数据库通常不会担心WHERE子句中语句的顺序。 但是,它不太可能被使用

WHERE two = 2 AND three = 3 -- no one

因为一个是索引的第一个组件,但没有出现在where子句

答案 1 :(得分:1)

由于'A AND B'在逻辑上等同于'B AND A',因此您给出的语句在逻辑上等同于以连续顺序列出子句的语句。由于数据库将能够进行这种简单的重写,因此它将能够使用索引,它可以将索引用于顺序列出的子句。

可能会创建在逻辑上等同于顺序排序语句但数据库无法转换的语句。这是因为生成逻辑等价物可能是一件非常重要的任务。