Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Vor- und Nachteile von TRUNCATE vs. DELETE FROM

TRUNCATE generiert keine Rollback-Daten, was es blitzschnell macht. Es hebt nur die Datenseiten auf, die von der Tabelle verwendet werden.

Wenn Sie sich jedoch in einer Transaktion befinden und diesen Löschvorgang "rückgängig machen" möchten, müssen Sie DELETE FROM verwenden , wodurch ein Rollback möglich ist.

BEARBEITEN: Beachten Sie, dass das obige für SQL Server falsch ist (aber es gilt für Oracle). In SQL Server ist es möglich, einen Kürzungsvorgang rückgängig zu machen, wenn Sie sich in einer Transaktion befinden und für die Transaktion kein Commit ausgeführt wurde. Aus der Sicht von SQL Server ist ein wesentlicher Unterschied zwischen DELETE FROM und TRUNCATE dies :"Die DELETE-Anweisung entfernt Zeilen einzeln und zeichnet für jede gelöschte Zeile einen Eintrag im Transaktionsprotokoll auf. TRUNCATE TABLE entfernt die Daten, indem die Zuordnung der zum Speichern der Tabellendaten verwendeten Datenseiten aufgehoben wird, und zeichnet nur die Seitenfreigaben im Transaktionsprotokoll auf ."

Mit anderen Worten wird bei einem TRUNCATE weniger protokolliert, da nur die Seitenfreigaben im Transaktionsprotokoll aufgezeichnet werden, während bei einem DELETE FROM jede Zeilenlöschung aufgezeichnet wird. Das ist einer der Gründe, warum TRUNCATE blitzschnell ist.

Beachten Sie bei diesem MSDN-Link auch, dass Sie keine Tabellen kürzen können, auf die durch Fremdschlüsseleinschränkungen verwiesen wird, die an einer indizierten Ansicht teilnehmen oder die mithilfe von Transaktionsreplikation oder Mergereplikation veröffentlicht werden.

BEARBEITEN 2: Ein weiterer wichtiger Punkt ist, dass TRUNCATE TABLE Ihre Identität auf den anfänglichen Startwert zurücksetzt, während DELETE FROM von dort aus weiterzählt, wo es aufgehört hat. Referenz:Ben Robinsons Antwort.