人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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

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

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

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

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

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

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

●質問者: kenicca
●カテゴリ:コンピュータ
✍キーワード:DB2 DELETE RDBMS SQL アプリケーション
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● saneppie
●40ポイント

http://www.atmarkit.co.jp/fnetwork/rensai/sql09/sql1.html

SELECT文を統合するUNION

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


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

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

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


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


SELECT * FROM マスタ

UNION

SELECT * FROM ワークテーブル


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


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

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

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

◎質問者からの返答

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

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

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


2 ● norakona
●20ポイント

http://www02.so-net.ne.jp/~khayashi/db2da/import.html

データの移入

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


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


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


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

◎質問者からの返答

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

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

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


3 ● kongmomo
●20ポイント

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

・・・・・)

◎質問者からの返答

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

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

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ