视图中的日期减法应该创建什么索引?
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
我有一个视图 (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