postgresql - sql - postgres :'SELECT *FROM tWHERE a< CURRENT_TIMESTAMP ORDER BY b'的最佳索引是什么?

148 3

查询是:


SELECT *


FROM t


WHERE a < CURRENT_TIMESTAMP


ORDER BY b



最好的索引是什么?

如果我们有另一个查询:


SELECT *


FROM t


WHERE a < CURRENT_TIMESTAMP AND c < CURRENT_TIMESTAMP


ORDER BY b



最好的索引是什么? 有没有一个索引可以同时提供两个查询?

时间: 原作者:

150 0

你需要的是部分索引(筛选索引),你可以在这里找到文档: https://www.postgresql.org/docs/current/indexes-partial.html


CREATE INDEX idx___xxx ON table (b)


 WHERE a<0;



原作者:
111 3

假设ac不包含空值,你可以编写:


WHERE a < CURRENT_TIMESTAMP AND c < CURRENT_TIMESTAMP ORDER BY b



作为:


WHERE GREATEST(a, c) < CURRENT_TIMESTAMP ORDER BY b



你可以在GREATEST(a, c)上创建索引,并包括覆盖列:


CREATE INDEX ix2 ON t(GREATEST(a, c), b)



但是验证这个的唯一方法是运行针对实际数据的查询。

原作者:
...