2026年11月1日

2026年11月1日

PostgreSQLのEXPLAIN ANALYZEでクエリ計画を分析する方法

はじめに

PostgreSQLは、データベース管理システムとして広く使用されています。しかし、SQLクエリが効率的かどうかを判断するためには、内部でどのように実行されるかを理解することが重要です。EXPLAIN ANALYZEは、そのようなクエリの実行計画(クエリ計画)を見える化し、最適化に役立つツールです。

症状・背景

このテーマが必要になる主な場面:

  • 高負荷時のパフォーマンス低下
  • SQLの優先度を上げる必要がある
  • クエリの実行時間が予想以上に長い
  • テーブルやインデックスが正しく作成されていない

手順・設定方法

ステップ1: EXPLAINを実行して基本的な計画を得る

# SQLクエリをEXPLAINで解析します。この例では、usersテーブルの全件取得を行います。
\timing on  # 実行時間も表示する
EXPLAIN SELECT * FROM users;

ステップ2: ANALYZEを追加して実際のパフォーマンス計画を得る

# EXPLAINとANALYZEを組み合わせることで、実際のI/O数や実行時間も確認できます。
EXPLAIN ANALYZE SELECT * FROM users WHERE age > 30;

ステップ3: 組み合わせ使用例

# ショートカットとして、EXPLAIN (ANALYZE, BUFFERS) を使うことも可能です。これでI/O数やメモリ消費量も確認できます。
EXPLAIN (ANALYZE, BUFFERS) SELECT * FROM users WHERE age > 30;

ステップ4: 実践とトラブルシュート

# EXPLAIN ANALYZEの結果から、パフォーマンスが低下している箇所を特定します。
EXPLAIN ANALYZE SELECT COUNT(*) FROM orders WHERE order_date BETWEEN '2021-01-01' AND '2021-12-31';
# 結果によると、ORDER BY clauseで全件探索が必要とされている可能性があります。インデックス化を検討します。

注意事項

  • EXPLAIN ANALYZEはデバッグツールとして有用ですが、大量のデータでは実行時間が長くなる場合があります。
  • 予め必要な権限があることを確認してください(特にANALYZEオプションを使用する際)。
  • 定期的な監視と最適化が必要です。

まとめ

1. EXPLAIN: SQLクエリの実行計画を表示します。

2. ANALYZE: EXPLAINに実行時間を追加し、パフォーマンス情報を得ます。

3. BUFFERS: I/O数やメモリ消費量も考慮に入れるためのオプションです。

4. 定期的な最適化: インデックスの再構築やクエリの最適化が必要です。

関連記事:

お気軽にご相談ください

お見積りへ お問い合わせへ
▲