我在PostgreSQL 9.4中有一个带有checked_at
时间戳字段和check_interval
整数字段的表。
我只需要返回行WHERE checked_at > NOW() - INTERVAL check_interval || ' minutes'
使用多列索引会提高此查询的速度吗?还是有其他方法来优化它?
该表仍处于设计阶段,但最终预计将搜索约5-10万条记录。
答案 0 :(得分:2)
多列索引对您没有帮助,但表达式的索引会有所帮助。如果您将查询更改为:
SELECT *
FROM tbl
WHERE (checked_at + (check_interval * (INTERVAL '1 minute'))) < NOW();
您可以使用索引
CREATE INDEX jbk_tbl_checkedat_checkinterval_ex ON tbl((checked_at + (check_interval * (INTERVAL '1 minute'))))