🗓️

PostgreSQLのクエリプラン(実行計画)の確認方法

に公開

はじめに

PostgreSQLでクエリプラン(実行計画)を確認する方法を調べてみました。
私は実務ではSQLServerしか触ったことがないため、PostgreSQLについては初心者です。
pgAdmin4を使用した説明となります。

クエリプラン確認の方法

コマンド

  • EXPLAINコマンドで推定のクエリプランを表示することが可能です。
  • EXPLAIN ANALYZEコマンドでは実際に実行した際のクエリプランを表示することが可能です。
EXPLAIN SELECT * FROM orders --推定のクエリプラン
EXPLAIN ANALYZE SELECT * FROM orders --実際のクエリプラン

GUI操作

pgAdmin4では、GUI操作でクエリプランを表示することが可能です。
今回はこちらがメイン。

  • 「F7」押下で推定のクエリプランを表示することが可能です。
  • 「Shift + F7」押下で実際に実行した際のクエリプランを表示することが可能です。
     ※ツールバーにあるExplain Settingsでチェックを入れることでオプションの指定が可能です。

GUIでのクエリプランの見方

「Shift + F7」押下でクエリを実行すると、
実行結果表示部に「Explain」タブが表示されます。
タブを選択すると「Graphical」、「Analysis」、「Statistics」が表示されています。

Graphical(図形表示)

図形でクエリプランが表示されます。
各図形を選択することでノード種別やコスト等を確認可能です。

Analysis(分析)

ノード種別や実行時間、レコード数が確認可能です。
実行時間はミリ秒表記です。

Statistics(統計)

クエリプランの統計が表示されます。
時間がかかっている操作が確認可能です。

勘所

パフォーマンスチューニングにおいていくつか勘所があります。

SeqScan(テーブルスキャン)

ノード種別がSeqScanがテーブルスキャンのことです。
全件走査されています。
レコード数が少ないテーブルであれば問題ありませんが、
こちらがボトルネックとなっている可能性が高いです。

適切なインデックスが設定されているか、
条件の指定方法に問題がないかを確認する必要があります。

実行時間

Analysis(分析)タブで時間のかかっている処理が分かりますので、
ボトルネックの特定が可能です。

その他

EXPLAIN ANALYZEの結果を渡すことで見やすく表示が可能になるアプリがあるようなので、
今後調べていきたいと思います。

Discussion