テーブルのアップデートに3時間もかかってしまい困っています。
チューニングにより速度改善できそうであれば、
教えていただけませんでしょうか?
UPDATE
TABLE_A
SET
TABLE_A.MATI_CD = TABLE_B.MATI_CD,
TABLE_A.UPD_DT = GETDATE(),
TABLE_A.UPD_MOD = 'バッチXX'
FROM
TABLE_A
INNER JOIN
TABLE_B
ON
TABLE_A.KEN_CD = TABLE_B.KEN_CD
AND
TABLE_A.MATI_NM = TABLE_B.MATI_NM
AND
TABLE_B.NENDO = '2004'
WHERE
(
TABLE_A.MATI_CD IS NULL AND TABLE_A.MATI_NM <> ''
OR
TABLE_A.MATI_CD = '' AND TABLE_A.MATI_NM <> ''
)
AND
TABLE_A.CRE_DT >= '2004/04/01'
TABLE_A
KEN_CD ・・・ (key)県コード
KEN_NM ・・・ 県名称
UKE_NO ・・・ (key)受付番号
EDA_NO ・・・ (key)受付番号枝番
MATI_CD・・・ 町コード
MATI_NM・・・ 町名称
CRE_DT ・・・ データ新規作成日
CRE_MOD・・・ データ新規作成モジュール名
UPD_DT ・・・ データ更新日
UPD_MOD・・・ データ更新モジュール名
TABLE_B
NENDO ・・・ (key)登録年度
MATI_CD・・・ (key)町コード
MATI_NM・・・ 町名称
KEN_CD ・・・ 県コード
CRE_DT ・・・ データ新規作成日
CRE_MOD・・・ データ新規作成モジュール名
UPD_DT ・・・ データ更新日
UPD_MOD・・・ データ更新モジュール名
TABLE_Aは受付記録を残すテーブルで、
現在およそ300万件入っています。
TABLE_Bは町コードのマスタテーブルで、
14000件入っています。
目的としては
TABLE_Aの町コードがNULLで町名称が登録されている場合、
TABLE_Bのマスタから町コードを登録してやろうという修正バッチです。
これがTABLE_Bが大量データのためかわかりませんが、
3時間もかかってしまうんです。。。
何か良い手段はありませんでしょうか?
ご助言お願いいたします。
No.1ベストアンサー
- 回答日時:
件数が多いのでメモリ不足になっているのではないでしょうか?
インデックスは適切に張っているという前提で回答します。
メモリ不足のようなので SQL を分割するといいでしょう。A テーブルと B テーブルの JOIN した結果をワークテーブルに落としておいてそれを元に一気に UPDATE かけるといいと思います。2度手間のように見えて意外と速くなりますよ。
それでもダメなら、あとはハードウェアですね。メモリを増やすとかディスクを増やすとかいくつか方法があります。
回答ありがとうございます。
kokegonさんのおっしゃるようにハードウェアの問題がかなり大きかったように思えます。
自分のPCに構築したテスト環境での処理を行った結果が3時間でしたが、
本番機で仮テストを行った結果5分と驚くほど時間が短縮されました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessでデータシートに同じデ...
-
accessでレコード更新直後の反...
-
マテリアライズドビューとスナ...
-
このISAMでは、リンクテーブル・・
-
Access昇順レコードを、5分割...
-
処理の途中で停止させ、再開さ...
-
構文エラー : 演算子がありませ...
-
Accessのテーブルデータを一気...
-
住所のDBテーブル、マスターの...
-
ACCESS2000でのリンクテーブル...
-
アクセス レコードセットを更...
-
「クリップボードにコピーされ...
-
分単位でログ集計するためカウ...
-
ERROR1062:Duplicate entry.......
-
MS Accessを共有した際にファイ...
-
テーブルで一番古いレコードだ...
-
Access(MDB)の複製(レプリケー...
-
Oracleで上書きImportはできま...
-
ACCESSで容量が50MBになった...
-
データベースを設計するときに
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessでデータシートに同じデ...
-
Accessのテーブルデータを一気...
-
テーブルで一番古いレコードだ...
-
Oracleで上書きImportはできま...
-
このISAMでは、リンクテーブル・・
-
アクセス レコードセットを更...
-
ビューのソートについて
-
マテリアライズドビューとスナ...
-
処理の途中で停止させ、再開さ...
-
MS Accessを共有した際にファイ...
-
構文エラー : 演算子がありませ...
-
ORA-01401が表示され、データが...
-
accessでレコード更新直後の反...
-
重複クエリを使ったデータ削除
-
Accessでの稼働日数計算の方法
-
住所のDBテーブル、マスターの...
-
同一テーブルのデータを参照し...
-
ERROR1062:Duplicate entry.......
-
ACCESSで容量が50MBになった...
-
複数のテーブルを参照するselec...
おすすめ情報