PostgreSQL でのクエリのパフォーマンスに関するヘルプが必要です。インデックスに関係しているようです。
このクエリ:
- によるフィルタリング
type
- 順
timestamp
、昇順:
SELECT * FROM the_table WHERE type = 'some_type' ORDER BY timestamp LIMIT 20
インデックス:
CREATE INDEX the_table_timestamp_index ON the_table(timestamp);
CREATE INDEX the_table_type_index ON the_table(type);
フィールドの値は、type
約 11 の異なる文字列のうちの 1 つにすぎません。問題は、クエリが O(log n) 時間で実行されるように見え、実行に数分かかる
いくつかの値を除いて、ほとんどの場合数ミリ秒しかかからないことです。type
これらのサンプル クエリでは、最初のクエリの実行に数ミリ秒しかかからず、2 番目のクエリは 30 分以上かかります。
SELECT * FROM the_table WHERE type = 'goq' ORDER BY timestamp LIMIT 20
SELECT * FROM the_table WHERE type = 'csp' ORDER BY timestamp LIMIT 20
約 90% の確率で、私たちが持っているインデックスは正しいものではないと思います。インデックスのパフォーマンスに関するこの同様の質問を読んだ後、私たちが必要としているのは と の複合インデックスである可能性が最も高いtype
と思いますtimestamp
。
私が実行したクエリプランは次のとおりです。
WHERE
期待されるパフォーマンス、タイプ固有のインデックス (つまり、句で type = 'csq' を持つ新しいインデックス)。- 上記のインデックスは、最も遅く、問題のあるケースです。
- 高速ケース、上記と同じインデックス。
どうもありがとうございました! どんなポインタでも本当に感謝します!