2016-06-13 3 views
0

PostgreSQL 9.4には、checked_atタイムスタンプフィールドとcheck_interval整数フィールドを持つテーブルがあります。私は複数列インデックスを使用して行のみWHERE checked_at > NOW() - INTERVAL check_interval || ' minutes'PostgreSQLの数学にインデックスを使用する

うを返す必要が

は、このクエリの速度を向上させますか?または、それを最適化する他の方法がありますか?

テーブルはまだ設計されていますが、最終的には約5-10百万のレコードを検索すると予想されます。

+1

を使用することができますcheckted_at' '上のインデックスは十分なはずです。特定のクエリに問題がある場合は、次のURLにアクセスしてください:https://wiki.postgresql.org/wiki/Slow_Query_Questions –

+1

@horse_with_no_name式がcheck_intervalに依存している場合、 'checked_at'のインデックスでは不十分です同じ行 –

答えて

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')))) 
関連する問題