(Dies war ursprünglich ein Kommentar zu @ DaveEs Antwort, aber ich habe ihn in eine eigene Antwort eingefügt, weil er lang wurde.)
TRUNCATE
ist eine protokollierte Operation. Es muss ansonsten nicht ACID-konform sein. Unterschiede zwischen TRUNCATE
und DELETE
:
- Nutzung des
TRUNCATE
Protokollspeicherplatzes : Protokolliert nur die freigegebenen Seiten / Bereiche *, während DELETE
einzelne Zeilen protokolliert werden.
TRUNCATE
Verwendung von Sperren : Im Allgemeinen werden weniger Sperren verwendet, da eine Tabellensperre und Seitensperren erforderlich sind, im Gegensatz zu DELETE
Zeilensperren **.
IDENTITY
sequence: TRUNCATE
Setzt die Identitätssequenz für eine Tabelle zurück, falls vorhanden.
(* Ein Extent = 8 Seiten TRUNCATE
protokolliert / entfernt Extents, wenn sie alle aus dieser einen Tabelle stammen, andernfalls werden Seiten aus gemischten Extents protokolliert / entfernt.
** Ein Nebeneffekt davon ist , dass DELETE FROM TABLE
möglicherweise leere Seiten der Tabelle zugeordnet werden kann, je nachdem , ob die Operation eine exklusive Tabellensperre bekommen kann oder nicht.)
Dies ist (zurück zur ursprünglichen Frage) eindeutig TRUNCATE TABLE
besser, als DELETE FROM TABLE
wenn Sie die Tabelle leeren, aber die Struktur beibehalten möchten ( TRUNCATE
Hinweis : Kann nicht für eine Tabelle verwendet werden, auf die ein Fremdschlüssel aus einer anderen Tabelle verweist).
Überprüfen Sie, wie in @ Tullos Kommentar erwähnt, auch das Wiederherstellungsmodell Ihrer Datenbank. Wenn es voll ist, müssen Sie entweder mit dem Erstellen von Protokollsicherungen beginnen oder Ihr Wiederherstellungsmodell in "Einfach" ändern. Sobald Sie eine dieser beiden getan haben, werden Sie wahrscheinlich wollen Ihre Log - Datei schrumpfen als einmalige Operation (NB: Protokolldatei nur ), um alle , dass der freie Raum zurückzufordern.
Zum Schluss noch etwas zu beachten - Tabellenstatistik. Führen Sie UPDATE STATISTICS <TABLENAME>' after
TRUNCATE /
DELETE` aus, damit das Abfrageoptimierungsprogramm nicht durch alte Statistiken gestört wird.
TRUNCATE TABLE
anstelle vonDELETE FROM
.