私は常に更新される配列を含むpostgresqlのテーブルを持っています。私のアプリケーションでPostgreSQLのカウントクエリの最適化
私は特定のパラメータは、その配列の列に存在されていない行数を取得する必要があります。私のクエリは次のようになります。
select count(id)
from table
where not (ARRAY['parameter value'] <@ table.array_column)
しかし、行の量とそのクエリの実行の量を増やしたときに(おそらく毎秒数回、数百または数千)の性能は、多くのことをデクリメントし、それはように私には思えますpostgresqlのカウントには線形の実行順序があるかもしれません(私は完全にはわかりません)。
基本的に私の質問は:
は、私は、このような状況に適用されるのを認識していないよ、既存のパターンがありますか?このための最良の方法は何でしょうか?
あなたは私を与えることができる任意の提案は本当にいただければ幸いです。
わかりませんが、table.array_columnのGINインデックスはこれをスピードアップするのに役立ちます。 EXPLAINを実行して調べる必要があります。ここをクリックしてください:http://dba.stackexchange.com/a/27505/1822 –
テーブルが大きくなると、これをポストグルで効率的にするのは難しいでしょう。ジンインデックスは、あなたの述語の「含まれていない」とは対照的に、「含む」のためにテストするときに役立ちます。カウントが100%正確であることが決定的に重要でない場合は、TTLを使ってアプリ層でキャッシングを試みることができます。テーブルの書き込み率が高すぎない場合、現在のカウントを含む別のテーブルを更新するためにトリガーを合理的に使用することができます。 – dbenhur
あなたのバージョンと 'explain analyze'を見せてください。 http://stackoverflow.com/tags/postgresql-performance/infoを参照してください。 –