[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 メーリングリストの案内