我有一个 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;
我需要哪些索引(如果有)来优化 View 计算列 (days_since_my_date
) 上大于/小于日期的查询?我假设它们需要应用于 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
关于sql - View 中的日期减法应该创建哪些索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31082682/