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

橋本 勝 hashimoto-m @ comtecc.net
2002年 6月 16日 (日) 00:57:45 JST


橋本です。

> user_tb 側に index があるのであれば、insert をおこなうまえに
> drop index し、insert が終ってから create index しなおした方が
> 速くなるかもしれません。
> 
その方法をやろうと思ったのですが、
user_tbはindexがなくてユニークキーだけだったので
DROPすることが出来なかったのです。
ユニークキーってDROP出来ないんですよね?

> work_user_db 側には index があったほうがよさそうです。
> 
はい、work_user_tbにはidに対してindexを張ってます。
それで少しは処理が早くなりました。
また、一応work_user_tbにCOPYする前にindexをDROPして
COPY後にCREATEするようにしてます。

> あと、増えた分の INSERT は、
> 
> INSERT INTO user_tb ( id, name )
> SELECT work_user_tb.id, work_user_tb.name
> FROM work_user_tb
>  WHERE NOT EXISTS 
>  (SELECT * FROM uesr_tb
>    WHERE user_tb.id = work_usre_tb.id)
> 
> とも書きかえられそうなので、試してみる価値はありそうです。

お知恵ありがとうございます。
こちらはやったことがないので試してみます。
(思いつきもしませんでした・・・)
UPDATEでもこのように他の方法はないのでしょうか?
いろいろ探したのですが、なかなか見つからなくて・・・

過去ログ等を検索してみましたが、大量データをDBに登録するのは、
やはりCOPYが一番いいようですね。
どうにかしてCOPYが有効に使えればいいのですが・・・





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