2016-06-13 52 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'))))