PostgreSQLスキルアップノート(自己啓発のための個人サイト)
実行計画(EXPLAIN)・基本
【一覧に戻る】
マニュアルへのリンクは/9.2/としています。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■■■■ PostgreSQL スキルアップノート
■■■■
■◆■■ 実行計画(EXPLAIN)・基本
■■■■
■■■■
■■■■ 使用環境:PostgreSQL9.1.7 (CentOS6.2)
2013/02/18
(C) 2013 ohdb
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
【マニュアル】
EXPLAIN→●[マニュアル]
【その他】
Lets's postgres・スロークエリの改善→●[記事]
Lets's postgres・スロークエリの分析→●[記事]
■1■ 概要
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
実行計画を表示するEXPLAIN。
■2■ 指定方法
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
以下の2とおりの構文がある。
前者(古くからの構文)が非推奨という訳ではない。
新しく(9.0で)追加されたオプションを使わないなら古くからの構文で構わない。
古くからの構文・・・ ANALYZEとVERBOSE限定版
EXPLAIN [ ANALYZE ] [ VERBOSE ] statement
新しい構文・・・指定内容をカッコでくくる
EXPLAIN [ ( option [, ...] ) ] statement
option default 内容
---------------------------------------------------------------------------
ANALYZE [boolean] FALSE 実際に処理実行。実行時間他の情報を表示。
VERBOSE [boolean] FALSE 追加情報出力
COSTS [boolean] TRUE 省略
BUFFERS [boolean] FALSE バッファ使用状況(必ずANALYZEとセットで使用)
TIMING [boolean] TRUE 省略
FORMAT [タイプ指定] TEXT 省略
[boolean] は省略可。カッコ内はパラメータの羅列のみでもよい。
booleanを省略した場合はTRUE指定の意味になる。
【注意】 ANALYZEを指定する場合、更新を避けるためにはロールバックするしかない。
BEGIN;
EXPLAIN ANALYZE ...;
ROLLBACK;
■3■ 指定方法の実例
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
新しい構文ではたくさんのoption指定があるが、デフォルトがTRUEのものなどを考えると
新しいoptionのうち実際に指定するのはBUFFERSくらい。
・実行を伴わないならANALYZE指定なし。実行するならANALYZE指定あり。
・VERBOSEで詳細情報。
・BUFFERSでバッファの使用状況(ANALYZE指定なしの時は指定不可)
実行を伴わない
1) EXPLAIN SQL文〜;
2) EXPLAIN VERBOSE SQL文;
実行を伴う
3) EXPLAIN ANALYZE SQL文;
4) EXPLAIN ANALYZE VERBOSE SQL文;
5) EXPLAIN (ANALYZE,VERBOSE,BUFFERS) SQL文;
■4■ 実行例
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1)
EXPLAIN SELECT * FROM t1;
QUERY PLAN
-------------------------------------------------------
Seq Scan on t1 (cost=0.00..22.30 rows=1230 width=36)
2)・・・追加情報がつく
EXPLAIN VERBOSE SELECT * FROM t1;
QUERY PLAN
--------------------------------------------------------------
Seq Scan on public.t1 (cost=0.00..22.30 rows=1230 width=36)
Output: c1, c2★
3)・・・実際の状況actualがつく
EXPLAIN ANALYZE SELECT * FROM t1;
QUERY PLAN
-------------------------------------------------------------------------------------------------
Seq Scan on t1 (cost=0.00..22.30 rows=1230 width=36) (actual time=0.007..0.011 rows=8 loops=1)
Total runtime: 0.035 ms
4)・・・追加情報がつく
EXPLAIN ANALYZE VERBOSE SELECT * FROM t1;
QUERY PLAN
--------------------------------------------------------------------------------------------------------
Seq Scan on public.t1 (cost=0.00..22.30 rows=1230 width=36) (actual time=0.007..0.011 rows=8 loops=1)
Output: c1, c2★
Total runtime: 0.035 m
5)・・・バッファ関連の情報がつく
(以下の例はバッファへのヒット数などが分かる)
EXPLAIN (ANALYZE,VERBOSE,BUFFERS) SELECT * FROM t1;
QUERY PLAN
--------------------------------------------------------------------------------------------------------
Seq Scan on public.t1 (cost=0.00..22.30 rows=1230 width=36) (actual time=0.007..0.011 rows=8 loops=1)
Output: c1, c2
Buffers: shared hit=1★
Total runtime: 0.059 ms
以上