それは、どのくらいのデータが変化しているかに本当に依存します。このテーブルに20列あるとしましょう。また、5つのインデックスがあり、それぞれが差分にあります。カラム。
20列すべての値が変化する場合、または5列のデータが変化し、これらの5列すべてにインデックスが付けられている場合でも、「削除と挿入」の方が良いかもしれません。ただし、2つの列のみが変更されており、これらが非クラスター化インデックスの一部ではない場合、この場合はクラスター化インデックスのみが更新されるため、レコードを「更新」した方がよい場合があります更新します)。
さらなる調査で、SQL ServerにはUPDATEを実行するための2つの独立したメカニズムがあるため、上記のコメントは冗長であることがわかりました。-「インプレース更新」(つまり、列の値を元の行の新しい値に変更する)、または「非インプレース更新」(DELETEの後にINSERT)。
インプレース更新がルールであり、可能であれば実行されます。ここで、行は同じエクステントの同じページの同じ場所に正確に留まります。影響を受けるバイトのみが変更されます。tlogには1つのレコードしかありません(更新トリガーがない場合)。ヒープが更新されている場合(およびページに十分なスペースがある場合)、更新が行われます。クラスタリングキーが変更されたが、行をまったく移動する必要がない場合にも、更新が行われます。
例:姓にクラスター化インデックスがあり、名前がAble、Baker、Charlieの場合、BakerをBeckerに更新します。行を移動する必要はありません。したがって、これはインプレースで実行できます。一方、AbleをKumarに更新する必要がある場合、行をシフトする必要があります(同じページにある場合でも)。この場合、SQL ServerはDELETEに続いてINSERTを実行します。
上記を考慮して、通常のUPDATEを実行し、SQL Serverが内部でそれを実行する最善の方法を把握できるようにすることをお勧めします。
"UPDATE"内部の詳細、またはSQL Server関連の内部については、Kalen Delaney、Paul Randalの著書、 SQL Server 2008 Internalsを参照してください。