sql - View 中的日期减法应该创建哪些索引?

标签 sql postgresql indexing

我有一个 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/

相关文章:

javascript - SQL 到 Mongo 事务架构

jquery获取最后一个输入字段索引

合并数据帧时 Pandas 'multi-index' 问题

sql - 为存储在 JSONb 列中的 Json 属性创建索引,该列包含 Postgres 中的 json 数组

sql - VBA/MS-ACCESS 中带有备注和文本字段的参数化插入?

sql - Postgresql:如何在不使用中间 hstore 的情况下将键值表转换为 json

node.js - Koa-pg 找不到模块 pg

PostgreSQL\dt 命令不显示 search_path 模式中的 *ALL* 表

java - Hibernate CriteriaQuery 如何查找具有两个条件的整数列表

PostgreSQL 检查约束