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