Postgres のパフォーマンスを大幅に向上させるツールの 1 つは、SQL クエリの実行計画の詳細を提供する EXPLAIN コマンドです。
EXPLAINコマンドとは何ですか?
EXPLAIN コマンドは、PostgreSQL プランナーが特定の SQL ステートメントに対して生成する実行プランを表示します。
これには、各クエリ ステップの実行にかかる推定コストに関する情報が含まれます。これらのコストを調べることで、クエリの実行が遅い理由と最適化方法を理解できます。
PostgreSQL のコストの説明
主に EXPLAIN コマンドを使用して、特定のクエリに関する情報を取得します。このコマンドは、クエリに関するいくつかの情報を出力します。
たとえば、次のようなクエリを考えてみましょう。
SELECT f.タイトル、c.name
フィルムfから
JOIN film_category fc ON f.film_id = fc.film_id
JOIN カテゴリ c ON fc.category_id = c.category_id;
前の単純な結合に対して Explain コマンドを実行すると、次のようになります。
EXPLAIN SELECT f.title、c.nameフィルムfから
JOIN film_category fc ON f.film_id = fc.film_id
JOIN カテゴリ c ON fc.category_id = c.category_id;
次のような出力が得られるはずです。
クエリ ステップごとに、PostgreSQL がそのクエリの推定コストを返すことに気づくかもしれません。
- startup_cost – 行の出力を開始する前に操作を初期化するための推定コストを示します。
- total_cost – すべての行を取得するための合計コスト。
- 行 – クエリによって返される推定行数を決定します。
- 幅 – これは、操作によって返されるすべての行の平均バイト数を決定します。
PostgreSQL のクエリ コストは、サーバー構成で設定されたコスト パラメーターによって決定される任意の単位で示されます。
これらのパラメータのキーは seq_page_cost で、キャッシュにないディスク ページのフェッチのコストを設定します。
pgAdmin を使用している場合は、「explain 分析」機能を使用して、explain コマンドのより読みやすく、適切に表示された図を取得できます。例えば:
各ステップをクリックすると、統計と推定コストが表示されます。
コストに基づいたクエリの最適化
クエリを最適化するときは、通常、コストが低いほど実行が高速になることを理解することが重要です。したがって、低コストでクエリを変更できます。
考慮すべき要素は次のとおりです。
テーブルインデックスを使用する – インデックスは、より高速な検索を可能にするデータ構造を維持することで、検索ベースのクエリのコストを大幅に削減します。
関数と演算子を賢く使用する – 実際のコストは特定のデータに大きく依存する可能性があるため、関数と演算子のコスト見積もりは必ずしも正確であるとは限りません。したがって、関数や複雑な演算子の使用は最小限に制限してください。
結論
PostgreSQL ANALYZE コマンドのコストの概念を調べました。コマンド出力の意味と、コスト出力を使用して特定のクエリを実行する最も効率的な方法を分析する方法について説明しました。