2016-06-13 21 views
0

我在PostgreSQL 9.4中有一个包含checked_at时间戳字段和check_interval整数字段的表。在PostgreSQL中使用数学指标

我需要只返回行WHERE checked_at > NOW() - INTERVAL check_interval || ' minutes'

会使用多列索引提高了查询的速度?还是有其他方法来优化它?

该表仍在设计中,但最终希望能够搜索大约5-10万条记录。

+1

的指数'checkted_at'应该够了。如果你有一个特定的查询问题,请阅读:https://wiki.postgresql.org/wiki/Slow_Query_Questions –

+1

@horse_with_no_name我很确定'checked_at'的索引是不够的,如果表达式依赖于check_interval从同一排。 –

回答

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'))))