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