[pgsql-jp: 26369] 大量データの更新

Hashimoto, Masaru hashimoto-m @ comtecc.net
2002年 6月 14日 (金) 16:01:20 JST


いつもこちらにはお世話になっております。
橋本と申します。
今回、初めて投稿させていただきました。

現在、約70万件のデータを毎日DBに登録するという
バッチ処理を作成しているのですが、
この処理に時間がかかってしまって困っています。
もし良い知恵がありましたらご教授願いますでしょうか。

処理内容は、はじめにデータをチェックして、正しいデータだけで
テーブルレイアウトと同じテキストファイルを作成します。
そのファイルをCOPYコマンドでワークテーブルへ取り込みます。

下記例のようにワークテーブルから本番のテーブルへ移すために
INSERTとUPDATEを実行します。
このINSERTとUPDATEで時間がかかってしまいます。
(70万件すべてUPDATEの場合だと20分は返ってきません)

=SQLの例=

UPDATE user_tb SET user_tb.name = work_user_tb.name
FROM work_user_tb
WHERE user_tb.id = work_user_tb.id;

INSERT INTO user_tb ( id, name ) 
SELECT work_user_tb.id, work_user_tb.name
FROM work_user_tb
  LEFT JOIN user_tb ON user_tb.id = work_user_tb.id
WHERE user_tb.id Is Null;

=====

INSERTだけだったら、直接本番テーブルへCOPYしてもいいと思いますが、
情報の変更もあるのでそれは実行することができずに、
ワークテーブルを経由するという苦肉の策になってしまいました。

UPDATEやINSERTの処理を早くすることはできるのでしょうか?
また、COPYコマンドでUPDATEのような処理はできないんでしょうか?

よろしくお願いいたします。






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