我有以下代码:
SELECT * FROM table WHERE column1='value1' AND column2='value2';
我有一个 column1
索引和另一个 column2
索引。
我如何告诉 Postgres 更喜欢第二个索引?我应该把它放在第一位吗?
最佳答案
你不能直接告诉 Postgres 更喜欢哪个索引。除了罕见的极端情况之外,这也没有意义。
WHERE
子句中表达式的顺序完全无关。查询规划器将应用它认为合适的谓词。您不限于仅使用一个索引。 Postgres 可以同时使用两者,并将它们与位图索引扫描结合起来。 dba.SE 上相关答案的详细信息:
但仅使用一个索引并过滤其余索引通常更有效。
最后,您可以在两列上创建单个多列索引,以优化性能。喜欢:
CREATE INDEX foo ON tbl (column1, column2);
甚至是partial index如果您的谓词之一是常量(大多数或所有查询都限制为
column2 = 'constant_value'
),并且此选择远小于整个表:CREATE INDEX foo ON tbl (column1) WHERE column2 = 'constant_value';
如果 Postgres 对查询计划做出了错误的选择,那么您的数据库中通常会出现问题:
关于sql - 如何优先考虑一个索引而不是另一个索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26725731/