[pgsql-jp: 31084] explainの結果が違う

Akihito Imai acdc @ livedoor.com
2003年 9月 18日 (木) 11:52:05 JST


a-kiと申します。
いつも参考にさせていただいています。

現在、2つのテーブルを結合させて情報取得をしようとしているのですが、
環境によって処理速度が全く違うため、そのSQLをexplainしてみたのですが、
結果が違いました。

両方とも環境は
RedHat7.2
Postgresql7.3.3
を使用しています。

このような現象をご存知ではありませんでしょうか?




実行SQL
select * from test1,test2 
WHERE test2.col1 = test1.col1 AND 
      test2.col2 = test1.col2 AND 
      test2.col3 = test1.col3;

test1には1000行
test2には2000行のデータ。

indexは張っていません。


環境A(問題なしにすぐ結果表示。)
Merge Join  (cost=139.66..149.66 rows=1 width=739)
   Merge Cond: (("outer".col3 = "inner".col3) AND ("outer".col2 = "inner".col2) AND ("outer".col1 = "inner".col1))
   ->  Sort  (cost=69.83..72.33 rows=1000 width=175)
         Sort Key: test1.col3, test1.col2, test1.col1
         ->  Seq Scan on test1  (cost=0.00..20.00 rows=1000 width=175)
   ->  Sort  (cost=69.83..72.33 rows=1000 width=564)
         Sort Key: test2.col3, test2.col2, test2.col1
         ->  Seq Scan on test2  (cost=0.00..20.00 rows=1000 width=564)

環境B(環境Aと比べ、約10倍ほど時間がかかる。)
 Hash Join  (cost=22.50..385.00 rows=1 width=1543)
   Hash Cond: ("outer".col1 = "inner".col1)
   Join Filter: (("outer".col2 = "inner".col2) AND ("outer".col3 = "inner".col3))
   ->  Seq Scan on test2  (cost=0.00..20.00 rows=1000 width=1238)
   ->  Hash  (cost=20.00..20.00 rows=1000 width=305)
         ->  Seq Scan on test1  (cost=0.00..20.00 rows=1000 width=305)





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