重複の可能性:
PostgreSQL のカウント クエリの最適化
PostgreSQL 9.2 を使用して、クエリの結果の数を追跡し、その数を効率的な方法で返す方法があるかどうかを調べようとしています。このクエリは、毎秒数回 (場合によっては数十から数百、さらには数千回) 実行する必要があります。現在のクエリは次のようになりますが、これは非効率的ではないでしょうか。
-- Get # of rows that do not have ‘parameter value’ in array_column
select count(*)
from table
where not (ARRAY[‘parameter value’] <@ table.array_column)
私の質問は次のとおりです(回答は複数の問題を同時に解決する可能性があります):
そのクエリのcount(id)
(またはそれについては)線形クエリですか?count(*)
(O(n))
PostgreSQL でこのクエリをより効率的にする方法はありますか? さまざまなパラメーター値を照会する必要があることを覚えておいてください。そのため、具体化されたビューを保持することは現実的ではないと考えています (ただし、パラメーター値ごとに 1 つを作成する方が良いと考えられる場合は検討する可能性があります)。
クエリのパフォーマンスを向上させるために、クエリ、データベース構造、または PostgreSQL サーバーの構成に変更を加える必要はありますか?
ポインタや提案は大歓迎です。これが完全に間違った方法である場合は、お知らせください。
編集
回答されたことを考慮して、具体化されたビューを使用するのが妥当かどうか疑問に思っていました。これは、いくつかの具体化されたビューを持つことを意味します (それぞれが異なるパラメーター値に対応し、その値が存在しない行を持ちます)。パラメータ値はある程度予測可能であるため、これは解決策としてはそれほど遠くないようです。ここで別の問題が生じます。具体化されたビューはここで役立ちますか? データベースで作成できるマテリアライズド ビュー (またはテーブル) の数に関して、(定義またはパフォーマンスのいずれかで) 制限はありますか?