[pgsql-jp: 33897] 異なるクエリ間のコスト比較
ITAGAKI Takahiro
itagaki.takahiro @ lab.ntt.co.jp
2004年 8月 20日 (金) 17:21:38 JST
板垣と申します。
論理的に等価なクエリのコストを調べていて、気になることがありました。
クエリは、以下の3つです。
1. select distinct tbl0.id from tbl0, tbl1 where tbl0.var = tbl1.var;
2. select tbl0.id from tbl0 where tbl0.var in (select tbl1.var from tbl1);
3. select tbl0.id from tbl0 where exists (select * from tbl1 where tbl0.var = tbl1.var);
それぞれのコストを見たところ、
最も高速な EXISTS を使用したパスのコストが異様に高くなっていました。
| cost | time
---+---------+-------------
1. | 573.79 | 219.058 ms
2. | 125.89 | 107.412 ms
3. | 3998.58 | 34.133 ms
実際には3つのクエリは等価なものだとして処理されないため、
これらのパスのコストが直接比較されることは無いのですが、
コストと速度が対応していないことを疑問に思っています。
異なるクエリ間でコストを比較することには意味が無いのでしょうか?
もしくは、他に何か原因や理由があるのでしょうか?
ご教示ください。お願いいたします。
------------------------------------------------------------
板垣貴裕 <itagaki.takahiro @ lab.ntt.co.jp>
pgsql-jp メーリングリストの案内