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

SQL Server2008に於いて

テーブルAの内容を元にテーブルBの内容を全て刷新したい場合
1.テーブルBのデータを全て削除
2.テーブルAの内容を元にテーブルBにInsert
とするのと
MERGE(Insert,Update,Delete)を使用して反映するのと
どちらが早いでしょうか?

●質問者: gin106
●カテゴリ:ビジネス・経営 コンピュータ
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● だわかき
●100ポイント

MERGEを使わない方が早いです。
ついでに言うと、「1.テーブルBのデータを全て削除」でテーブルBをDROPしてから再構築した方が早いです。


gin106さんのコメント
これは、経験則ですか? 比較してみた・・と言う事でしょうか? 若しくは 内部的な動作をご存じなので・・・なのでしょうか? ※私も直感的には、Delete(Drop)/Insertの方が早いと考えています ※別段、実証テスト結果・HPでの記載の提示等を求めている訳では有りません

だわかきさんのコメント
経験則というより、主要なRDBMSのSQL実行時間については実測データとして管理しています。 具体的な数字は企業秘密ですが、MERGE/DROP/INSERTの比較という意味で回答しました。

2 ● holoholobird
●100ポイント

前者ですね。
理由としては、まずdropはデータの件数によらず実行時間にほとんど時間がかからないため、実行時間は実質0秒とみなせます。
従って本件の比較は、
AをBにinsertするのと、AをBにMERGEするのはどちらが早いかということになります。

MERGEはBにinsertする際、同じデータがないかどうかをまず検索して、あるならupdate、ないならinsertという動作を取ります。

今回に限っては必要なデータはAに含まれているので、検索という動作を行う分、後者のほうがオーダーが増加します。

オーダーの差分は件数が増えれば増える分増加するため、少ないデータ数なら前者と後者に違いはありませんが、数百万件になると速度は目に見えて変化します。


●質問をもっと探す●



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