SQL Server2008に於いて


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

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2013/05/21 09:40:15
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:dawakaki No.1

回答回数797ベストアンサー獲得回数122

ポイント100pt

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

id:gin106

これは、経験則ですか?
比較してみた・・と言う事でしょうか?
若しくは
内部的な動作をご存じなので・・・なのでしょうか?

※私も直感的には、Delete(Drop)/Insertの方が早いと考えています
※別段、実証テスト結果・HPでの記載の提示等を求めている訳では有りません

2013/05/17 19:35:03
id:dawakaki

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

2013/05/18 08:25:39
id:holoholobird No.2

回答回数574ベストアンサー獲得回数104

ポイント100pt

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

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

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

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

コメントはまだありません

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

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

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

回答リクエストを送信したユーザーはいません