[pgsql-jp: 40897] Re: auto_explainの実行計画について

Itagaki Takahiro itagaki.takahiro @ gmail.com
2011年 8月 22日 (月) 19:33:35 JST


2011/8/21 Yoshiyuki Asaba <ysyk.asaba @ gmail.com>:
> 9.0.4で同じく実験してみました。analyzeするとプランを作りなおすようです。

なぜ差があったのか調べていたんですが、どうやら
「更新があった後、ANALYZE するとプランを作りなおす」
ように見えました。

更新せず、ANALYZE を繰り返すだけでは、再プランはしないようです。
無駄な処理を避けているんでしょうね。お騒がせしました。


=# CREATE TABLE t (a int primary key);
=# INSERT INTO t values (1);
=# ANALYZE;
=# PREPARE a AS SELECT * FROM t WHERE a = $1;
=# EXPLAIN EXECUTE a(1);
                   QUERY PLAN
-------------------------------------------------
 Seq Scan on t  (cost=0.00..1.01 rows=1 width=4)
   Filter: (a = $1)
(2 行)

=# SET enable_seqscan = off;
=# ANALYZE t;  ★このANALYZEでは再プランニングされない
=# EXPLAIN EXECUTE a(1);
                   QUERY PLAN
-------------------------------------------------
 Seq Scan on t  (cost=0.00..1.01 rows=1 width=4)
   Filter: (a = $1)

=# INSERT INTO t VALUES (2);
=# ANALYZE t;  ★INSERT後なら再プランニングされる
=# EXPLAIN EXECUTE a(1);
                           QUERY PLAN
----------------------------------------------------------------
 Index Scan using t_pkey on t  (cost=0.00..8.27 rows=1 width=4)
   Index Cond: (a = $1)

-- 
Itagaki Takahiro


pgsql-jp メーリングリストの案内