如果我在列上建立了一个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
答案 0 :(得分:1)
在所有情况下都是,因为数据库通常不会担心WHERE子句中语句的顺序。 但是,它不太可能被使用
WHERE two = 2 AND three = 3 -- no one
因为一个是索引的第一个组件,但没有出现在where子句
中答案 1 :(得分:1)
由于'A AND B'在逻辑上等同于'B AND A',因此您给出的语句在逻辑上等同于以连续顺序列出子句的语句。由于数据库将能够进行这种简单的重写,因此它将能够使用索引,它可以将索引用于顺序列出的子句。
可能会创建在逻辑上等同于顺序排序语句但数据库无法转换的语句。这是因为生成逻辑等价物可能是一件非常重要的任务。