Freigeben über


Löschen aller Zeilen mit TRUNCATE TABLE

Die TRUNCATE TABLE-Anweisung ist ein schnelles Verfahren zum Löschen aller Zeilen in einer Tabelle, das nicht protokolliert wird. TRUNCATE TABLE ist im Hinblick auf ihre Funktion gleichwertig mit der DELETE-Anweisung ohne eine WHERE-Klausel. TRUNCATE TABLE ist jedoch schneller und verwendet weniger Systemressourcen und Ressourcen für die Transaktionsprotokollierung.

Verglichen mit der DELETE-Anweisung hat TRUNCATE TABLE die folgenden Vorteile:

  • Es wird weniger Speicher für die Transaktionsprotokollierung verwendet.
    Die DELETE-Anweisung entfernt jede Zeile einzeln und protokolliert jede Löschung einzeln im Transaktionsprotokoll. Beim Entfernen der Daten mit TRUNCATE TABLE wird die Zuordnung der zum Speichern der Tabellendaten verwendeten Datenseiten aufgehoben, und nur die Zuordnungsaufhebungen der Datenseiten werden im Transaktionsprotokoll aufgezeichnet.
  • Es werden in der Regel weniger Sperren verwendet.
    Wenn die DELETE-Anweisung mithilfe einer Zeilensperre ausgeführt wird, wird jede Zeile in der Tabelle zum Löschen gesperrt. Mit TRUNCATE TABLE wird immer die Tabelle und die Seite gesperrt, jedoch nicht jede Zeile.
  • Ohne Verwendung einer Ausnahme verbleiben null Seiten in der Tabelle.
    Nach der Ausführung einer DELETE-Anweisung kann die Tabelle weiterhin leere Seiten enthalten. So können z. B. die Zuordnungen leerer Seiten in einem Heap nicht aufgehoben werden, ohne dass zumindest eine exklusive (LCK_M_K) Tabellensperre vorhanden ist. Wenn der Löschvorgang keine Tabellensperre verwendet, enthält die Tabelle (der Heap) viele leere Seiten. Bei Indizes kann der Löschvorgang leere Seiten hinterlassen, obwohl die Zuordnung dieser Seiten schnell durch einen im Hintergrund ausgeführten Cleanupprozess aufgehoben wird.

Wie bei DELETE verbleibt die Definition einer Tabelle, deren Inhalt mit TRUNCATE TABLE gelöscht wurde, in der Datenbank, zusammen mit ihren Indizes und anderen zugehörigen Objekten.

Abschneiden großer Tabellen

In Microsoft SQL Server 2005 besteht erstmals die Möglichkeit zum Löschen bzw. Abschneiden von Tabellen, die mehr als 128 Blöcke enthalten, sofern sie nicht gleichzeitig Sperren für alle Blöcke enthalten, die für den Löschvorgang benötigt werden. Weitere Informationen finden Sie unter Löschen und Neuerstellen großer Objekte.

Beispiele

Mit dem folgenden Beispiel werden alle Daten aus der JobCandidate-Tabelle entfernt. SELECT-Anweisungen werden vor und nach der TRUNCATE TABLE-Anweisung eingeschossen, um die Ergebnisse zu vergleichen.

USE AdventureWorks;
GO
SELECT COUNT(*) AS BeforeTruncateCount 
FROM HumanResources.JobCandidate;
GO
TRUNCATE TABLE HumanResources.JobCandidate;
GO
SELECT COUNT(*) AS AfterTruncateCount 
FROM HumanResources.JobCandidate;
GO

Siehe auch

Konzepte

Löschen von Zeilen mithilfe von DELETE
Löschen von Zeilen in Resultsets
Beschränken von zu löschenden Zeilen mithilfe von TOP

Andere Ressourcen

DROP TABLE (Transact-SQL)
TRUNCATE TABLE (Transact-SQL)

Hilfe und Informationen

Informationsquellen für SQL Server 2005