我正在运行PostgreSQL 9.6,并且我有一个名为decks
的表,该表的类型为expiration
的{{1}}列(用于存储卡组,其中每张卡可以独立到期)。
我想创建一个每晚的Cron作业,以查找在前一天的任何时候(即在0:00和23:59(含)之间。
这似乎给了我想要的时间范围...
timestamp with time zone
...但是我想知道两件事:
SELECT id
FROM decks
WHERE expiration >= (now()::date - 1)::timestamptz
AND expiration < (now()::date)::timestamptz;
列的最佳方法是什么?答案 0 :(得分:0)
问题1:对于该查询,标准索引是最佳选择。但是,请参见下文。
问题2:这里有很多选择。快速查询查询:
SELECT id
FROM decks
WHERE expiration::date = (now()::date - 1);
...使您可以在expiration::date
上创建一个功能索引,该索引应该更小,效率更高。
我个人更进一步,使用current_date
代替now()
:
SELECT id
FROM decks
WHERE expiration::date = (current_date - 1);
一如既往,我建议在评估索引时使用EXPLAIN
和EXPLAIN ANALYZE
。