Sql 在多个列上使用索引

Sql 在多个列上使用索引,sql,postgresql,Sql,Postgresql,如果我在列(一、二、三、四、五)上建立一个btree索引 它是否将用于带有where块的查询: (1) ... WHERE one = 1 AND two = 2 AND three = 3 AND four = 4 -- no five 或 或 在所有情况下都是这样,因为数据库通常不关心WHERE子句中语句的顺序。 然而,它不太可能被使用 WHERE two = 2 AND three = 3 -- no one 因为其中一个是索引的第一个组件,但不会出现在where子句中,因为“A和B”

如果我在列(一、二、三、四、五)上建立一个btree索引 它是否将用于带有where块的查询:

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


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

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

因为其中一个是索引的第一个组件,但不会出现在where子句中,因为“A和B”在逻辑上等同于“B和A”,所以您给出的语句在逻辑上等同于按顺序列出这些子句的语句。因为数据库将能够进行这种简单的重写,所以它将能够在可以使用索引的地方使用索引来为顺序列出的子句创建索引

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

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