問題タブ [query-planner]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
postgresql - すべての外部キー値が等しい大きなテーブルの EXISTS クエリで、順次スキャンの代わりに postgres にこのインデックスを使用させるにはどうすればよいですか?
現在、postgres クエリを改善しようとしています。以下は、postgres-12.6 で私の問題の本質を再現するための最小限のセットアップです。
data_node
大きなテーブルによって参照される小さなテーブルのすべてのエントリを効率的にフィルタリングしようとしていdata_entry
ます。ノードのサブセットのみが参照されることが予想され、一部のインストール インスタンスでは、1 つのノードのみが参照される場合があります。次のクエリは、仕事をするのに自然に思えます。
両方のテーブルに対してVACUUM ANALYZE
を実行すると、次のクエリ プランが生成されます。
示されている最小限のセットアップでは、クエリに数秒 (実際の、最小限度の低いアプリケーション シナリオでは数分) かかりますが、より大きなテーブルでインデックスを使用すると、クエリは 1 ミリ秒未満で実行されるはずです。を設定SET enable_seqscan = false;
することで、postgres に「適切な」クエリ プランを使用させることができました。
enable_seqscan
これにより、テスト設定で必要なものが得られますが、もちろん、グローバルに変更することは、運用環境にとって実行可能なソリューションではありません.
postgres が「適切な」クエリ プランまたは同等のパフォーマンスのプランを使用して、参照された小さなテーブル エントリのフィルタリングを実行することを確認する「クリーンな」方法はありますか?