書籍名「内部構造から学ぶ POstgreSQL 設計運用計画の鉄則」 実行計画
印象に残った部分
p256 実行計画とは
問い合わせを発行すると、PostgreSQLのプランナは様々な検索方法の中から処理コストが最小になる選択や組み合わせを計算します。
上のコストが最小化された検索方法のことを実行計画という。
統計情報に基づいて実行計画は作成される。
p258 実行計画の取得方法
・SQLで実行する方法
EXPLAINコマンドを使う
・自動的に取得する方法
拡張モジュール「auto_explain」を有効にする
p40 統計情報とは
統計情報・・各列の典型的な値と各列のデータ分布を概要を示す度数分布
アナライズ・・クエリを実行する際に利用する統計情報を収集してpg_staticシステムカタログを更新する処理。
p266 p262 統計情報の取得方法
・SQLで実行する方法
ANALYZEコマンドを使う
・自動的に取得する方法
自動バキューム機能を使う
p273 実行計画の構造
下から順に実行される
最初にindex Scanが実行されて
ノードの分類 | 説明 | 具体的なノード | 備考 |
---|---|---|---|
スキャン系 | 最初に実行されるノード。データを選別するフィルタ条件 | Seq ScanIndex ScanIndex Only Scanなど | Where?、Index |
複数のデータを結合 | 2つのテーブルのスキャン結果を入力とし、1つの結果を出力 | Nested LoopHash JoinMerge Join | inner Join Left Joinなど? |
データを加工 | なし | Limit Result | -- |
Sortは優先度低い
p288 289 処理コストの見積もり値と実行結果
・処理コストの見積もり=実行計画
・実際の実行時間→EXPLAIN ANALYZE を実行して確認できる
・見積もり時間と実行時間は統計情報に基づいて算出されるため、統計情報は定期的に取得する。
todo なんで見積もりと実際の実行時間が変わるんだ???理由をあとで調べておく
実践すること or 感想
実行計画の概要を知れて良かったです。
とりあえず、統計情報→実行計画の順で取得するってことは理解できました。
実行計画と統計情報を自分の言葉で説明しろって言われてたら グレーですね。まだ理解不足感ありますね。
実践すること
・実際にクエリを打って、実行計画を確認する
・前にSQLパズルのリポジトリがあるので、それを使う。
https://github.com/RYA234/SQL_Puzzle_Learning
・本書のパフォーマンスチューニングの部分を読み込む