2011年8月22日

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

2011/8/21 Yoshiyuki Asaba <ysyk.asaba@xxxxx>:
> 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

投稿者 xml-rpc : 2011年8月22日 19:33
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/105910
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。