[pgsql-jp: 37965] (無題)

小原 太 ohara @ mri.co.jp
2007年 1月 26日 (金) 00:16:23 JST


小原と申します。

SQL&PostgreSQL初心者です。
現在、初めて大規模テーブルの処理を行っており、
2つのテーブルから新しいテーブルを作成する処理で
非常に時間がかかっています。

実行しているSQL文は以下となっています。

select table1.column1, table1.column2, table1.column3, table1.column4
into new_table
from table1
inner join table2
on table1.column1=table2.column1 and table1.column2=table2.column2 and 
table1.column3=table2.column3 and table1.column4=table2.column4;

table1は7500万行、table2は数万行であり、table2のみ
column1〜column4によってレコードがユニークとなっています。
これを実行して、丸1日経っても返ってきません。

また、今後table1が7500万行、table2が5000万行で上記の
ような処理を行いますので、どうすべきか悩んでいます。


なお、実行環境は
PostgreSQL ver8.1.5
OS : Windows Server 2003 Enterprise edition
CPU : Xeon5140(4MB L2キャッシュ 2.33GHz 1333MHzFSB)×2
メモリ : 8GB
ハードディスク : SAS10000回転300GB×6(RAID5)
データベース使用領域 : 600GB
であり、
postgresql.confのパラメータはWeb情報等を鵜呑みにして
shared_buffers = 10000
wal_buffers = 64
effective_cache_size = 256000
としています。


これほど時間がかかるのは何か根本的に間違えているのでしょうか?

あるいは、table1、table2をそれぞれcolumn1の内容ごとに小分けにしてから
内部結合を行い、最終的にできたテーブルを統合するほうがよいなど、
なにかいい手法があれば教えていただきたく存じます。

長くなり申し訳ございません。
何卒よろしくお願いいたします。






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