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




以上 
inserted by FC2 system