[SQL][緊急] 主キーが設定されていない同一レイアウトのテーブル間でのデータコピーをするようなSQLについて教えてください。


同一レイアウトのワークテーブルとマスタテーブルがあって、ワークテーブルの内容をマスタテーブルにできるだけ早い速度で設定したいというのがやりたいことです。

現在、いくつか制約があり悩んでおります。

1) 主キーが設定されていない
2) 差分更新で処理を行う(ワークのテーブルを作成してマスタテーブルをドロップ後、テーブル自体をコピーとかはダメ)
3) 更新中も他のアプリケーションから参照できること(排他にならない)

また、条件は以下の通りです。

1) フィールドは6つ。
2) データは20万件くらい。
3) 業務的に6つのうち3つのフィールドをもってユニークとなるが、nullも入りうる。
4) SQLは何度発行してもよい。
5) RDBMS: DB2 v7

現状、二つのテーブルを外部結合して差分を求めて、求めた差分をについて一行ずつDELETE/INSERTを行っています。また、キー(業務的にユニーク)が等しいものについても一行ずつUPDATEを行っています。

知恵をいただけたら嬉しいです。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2005/04/26 12:49:20
  • 終了:--

回答(3件)

id:saneppie No.1

saneppie回答回数6ベストアンサー獲得回数02005/04/26 18:57:40

ポイント40pt

2)について差分更新、つまり元のマスタデータを保持できれば、テーブルを再度作成することはOKなら次の方法がとれるかと思います。


①差分更新したい二つのテーブルを「UNION」して和集合のレコードを取得します。

②①の内容で新たにワークテーブルを作ります。

③マスタを削除して①のワークテーブルの内容をコピーします。


①のところでレコードを選択するときに


SELECT * FROM マスタ

UNION

SELECT * FROM ワークテーブル


とすれば、重複データは一行になってくると思いますが…。


マスタは消さない!更新のみ! という制限、

更新中も、他のアプリケーションから参照となると使えないかも。

↑ 書きながら気がつきました。

id:kenicca

回答ありがとうございます。

ただ、お察しの通りマスターテーブルのほうはこの処理中も参照したいらしく、差分だけを上手く更新したいんです。

回答ありがとうございました。

2005/04/29 19:19:42
id:norakona No.2

norakona回答回数18ベストアンサー獲得回数02005/04/26 21:05:11

ポイント20pt

postgreSQLにて大量データを挿入する場合INSERT文よりもCOPYコマンドというもので外部ファイルから一括で読み込んだほうが非常に早く処理できました。


DB2の使用経験がないため結果早くなるかはわからないのですが、同様と思われる「LOAD」「EXPORT」コマンドがあるようです。


ただ、UPDATEができないようですので、全件挿入後に既存分を削除するなど、何らかの対処は必要になるとは思います。


直接的な解決策とはなりませんがご参考になれば・・。

id:kenicca

回答ありがとうございます。

IMPORT/EXPORT を提案してみましたが、却下されてしまいました。

どうしても差分更新をしたいそうなのです。

2005/04/29 19:21:15
id:kongmomo No.3

kongmomo回答回数1ベストアンサー獲得回数02005/04/27 13:18:50

ポイント20pt

http://www.geocities.jp/mickindex/database/db_optimize.html#Loca...

SQLを速くするぞ―お手軽パフォーマンス・チューニング

insert into メインテーブル FROM ワークテーブル WHERE NOT EXISTS (

SELECT * from メインテーブル

WHERE メインF1=ワークF1

and メインF2=ワークF2

・・・・・)


insert into メインテーブル FROM ワークテーブル WHERE NOT IN (

SELECT ワークテーブル.* from メインテーブル,ワークテーブル

WHERE メインF1=ワークF1

and メインF2=ワークF2

・・・・・)

id:kenicca

最初は、まさにそのSQLでやっていたのですが

件数が多くなるとどうしても遅くなりますね。

しかもキー項目にnullが入ると、WHERE句の条件のところで結果がおかしくなるみたいです。

回答ありがとうございました。

2005/04/29 19:56:15
  • id:utagawh
    import/exportはだめでしょう

    DB2だと少なくともExport中はそのテーブルはロックされるので他に動いている処理が待たされるてしまいます。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません