ホームページ > データベース > mysql チュートリアル > PostgreSQL の「SELECT DISTINCT」が非常に遅いのはなぜですか?どうすれば修正できますか?

PostgreSQL の「SELECT DISTINCT」が非常に遅いのはなぜですか?どうすれば修正できますか?

Linda Hamilton
リリース: 2025-01-07 18:39:40
オリジナル
961 人が閲覧しました

Why is My PostgreSQL `SELECT DISTINCT` So Slow, and How Can I Fix It?

PostgreSQL SELECT DISTINCT パフォーマンスのボトルネック: ケーススタディ

この記事では、約 200 万レコードを含む PostgreSQL テーブルに対する SELECT DISTINCT クエリで発生するパフォーマンスの問題について検証します。

コンテキスト

tickers テーブルには、Coinbase Pro の「ティッカー」チャネルからのデータが保存されます。 複合主キーには product_id 列が含まれます。

パフォーマンスの問題

クエリ SELECT DISTINCT product_id FROM tickers は、product_id のインデックスにより良好なパフォーマンスが期待されました。 ただし、実行には一貫して 500 ~ 600 ミリ秒かかりました。

クエリプランの調査

EXPLAIN ANALYZE は、クエリ プランナーがデフォルトで順次スキャンに設定され、product_id インデックスを無視することを示しました。 インデックスの使用を強制してもパフォーマンスの問題は解決されませんでした。

インデックス最適化の試行

product_id に専用のインデックスを作成しても、わずかな改善しか得られず、明示的にオーバーライドしない限り、プランナは依然として順次スキャンを優先します。

効果的な解決策: インデックス スキップ スキャン エミュレーション

実装されたソリューションは、横結合による再帰クエリを使用してインデックス スキップ スキャンをエミュレートします。このアプローチによりパフォーマンスが大幅に向上し、225 万行のデータセットでも実行時間が 0.75 ミリ秒に短縮されました。

概要

PostgreSQL には現在ネイティブ インデックス スキップ スキャン機能がありませんが、このエミュレーション技術によって解決されます。 この方法では、既存のインデックスを効果的に利用し、大きなテーブルに対する SELECT DISTINCT クエリの連続スキャンによるパフォーマンスの低下を回避します。

以上がPostgreSQL の「SELECT DISTINCT」が非常に遅いのはなぜですか?どうすれば修正できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート