视图中的日期减法应该创建什么索引?

What indexes should be created for date subtraction in view?

我有一个视图 (my_view),其中包含一个计算列 (days_since_my_date),它获取今天和日期列 (my_date 来自 my_table):

CREATE VIEW my_view AS 
SELECT 'now'::text::date - my_date AS days_since_my_date,
...
FROM my_table;

我需要优化比视图计算列 (days_since_my_date) 上的日期查询更大 than/less 的哪些索引(如果有)?我假设它们需要应用于 my_table 中的 my_date 列。查询将相当简单,类似于以下内容:

SELECT * 
FROM my_view 
WHERE days_since_my_date >= 10;

针对 my_date 创建的标准索引,如下所示,在上述查询期间未被命中:

CREATE INDEX my_date_idx on my_table(my_date);

非常感谢任何帮助。

你不能为你的表达式建立索引,因为它依赖于一个不确定的函数。

您应该将索引列与常量(截至运行时)进行比较,而不是比较构造的列:

SELECT  *
FROM    my_view
WHERE   my_date <= NOW() - '10 days'::INTERVAL