Es hängt wirklich davon ab, wie viele Daten sich ändern. Nehmen wir an, diese Tabelle enthält 20 Spalten. Und Sie haben auch 5 Indizes - jeder auf einem Diff. Säule.
Wenn sich nun die Werte in allen 20 Spalten ändern ODER wenn sich die Daten in 5 Spalten ändern und diese 5 Spalten alle indiziert sind, ist es möglicherweise besser, sie zu löschen und einzufügen. Wenn sich jedoch nur 2 Spalten ändern und diese beispielsweise nicht zu nicht gruppierten Indizes gehören, sollten Sie die Datensätze möglicherweise besser "aktualisieren", da in diesem Fall nur der gruppierte Index aktualisiert wird (und dies bei Indizes nicht der Fall sein muss) bleibe auf dem Laufenden).
Bei weiteren Nachforschungen stellte ich fest, dass der obige Kommentar von mir redundant ist, da SQL Server intern über zwei separate Mechanismen zur Durchführung eines UPDATE verfügt. - Ein "In-Place-Update" (dh durch Ändern eines Spaltenwerts in einen neuen in der ursprünglichen Zeile) oder als "Nicht-In-Place-UPDATE" (DELETE, gefolgt von einem INSERT).
In-Place-Updates sind die Regel und werden nach Möglichkeit durchgeführt. Hier bleiben die Zeilen im gleichen Umfang genau an der gleichen Stelle auf der gleichen Seite. Nur die betroffenen Bytes werden geändert. Das Protokoll enthält nur einen Datensatz (sofern keine Update-Trigger vorhanden sind). Aktualisierungen finden statt, wenn ein Heap aktualisiert wird (und auf der Seite genügend Speicherplatz vorhanden ist). Aktualisierungen finden auch statt, wenn sich der Clustering-Schlüssel ändert, die Zeile jedoch nicht verschoben werden muss.
Zum Beispiel: Wenn Sie einen Clustered-Index für den Nachnamen haben und die Namen: Able, Baker, Charlie. Jetzt möchten Sie Baker auf Becker aktualisieren. Es müssen keine Zeilen verschoben werden. Dies kann also an Ort und Stelle erfolgen. Wenn Sie dagegen Able auf Kumar aktualisieren müssen, müssen die Zeilen verschoben werden (auch wenn sie sich auf derselben Seite befinden). In diesem Fall führt SQL Server ein DELETE gefolgt von einem INSERT aus.
In Anbetracht des Obigen würde ich vorschlagen, dass Sie ein normales UPDATE ausführen und SQL Server den besten Weg finden lassen, dies intern zu tun.
Weitere Informationen zu "UPDATE" -Innenteilen oder zu SQL Server-bezogenen Internenteilen finden Sie in Kalen Delaneys Buch " SQL Server 2008 Internals" von Paul Randal und anderen .