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