Wer regelmäßig mit SQL arbeitet, kommt an den Befehlen DELETE und TRUNCATE kaum vorbei. Beide dienen dazu, Daten aus einer Tabelle zu löschen – aber sie funktionieren sehr unterschiedlich. Der richtige Einsatz spart Performance, Speicherplatz und manchmal auch Nerven.
1. Grundidee: Was machen DELETE und TRUNCATE?
- DELETE löscht Datensätze einzeln.
Du kannst genau festlegen, welche Zeilen entfernt werden sollen. - TRUNCATE löscht die gesamte Tabelle auf einmal – ohne WHERE-Bedingung.
Die Tabelle bleibt bestehen, aber alle Daten darin werden entfernt.
Beispiel:
-- Einzelne Zeilen löschen
DELETE FROM Kunden WHERE Land = 'Deutschland';
-- Alle Zeilen löschen (aber Struktur bleibt)
TRUNCATE TABLE Kunden;
2. Performance: Warum TRUNCATE deutlich schneller ist
- DELETE arbeitet zeilenweise und schreibt jeden Löschvorgang in das Transaktionslog.
Das ist sicher, aber langsam bei großen Tabellen. - TRUNCATE arbeitet seitenweise – es leert die Datenpages direkt.
Dadurch ist der Befehl deutlich schneller und erzeugt weniger Logeinträge.
Wenn du also eine große Tabelle komplett leeren willst, ist TRUNCATE meist die bessere Wahl.
3. Transaktionen und Rollback
Beide Befehle können in einer Transaktion verwendet werden:
BEGIN TRAN
DELETE FROM Kunden;
ROLLBACK TRAN;
Das funktioniert auch mit TRUNCATE, solange du es innerhalb einer Transaktion ausführst. Danach kannst du mit ROLLBACK die Löschung rückgängig machen – solange sie noch nicht committet wurde.
4. Einschränkungen bei TRUNCATE
TRUNCATE ist mächtig, aber nicht überall erlaubt:
- Du kannst keine WHERE-Bedingung verwenden.
- TRUNCATE funktioniert nicht, wenn
- die Tabelle in einer Foreign-Key-Beziehung steht,
- es Trigger auf der Tabelle gibt,
- oder wenn sie Teil einer Replikation ist.
In diesen Fällen bleibt nur DELETE als Option.
5. Auswirkungen auf Identitätsspalten (IDENTITY)
Ein wichtiger Unterschied:
- DELETE lässt den Zähler der IDENTITY-Spalte unverändert.
- TRUNCATE setzt ihn zurück auf den Startwert.
Beispiel:
Wenn du Datensätze mit IDs 1–100 gelöscht hast, beginnt der nächste Eintrag bei 101.
Nach einem TRUNCATE fängt die Zählung wieder bei 1 an.
6. Speicherplatz & Logging
Da TRUNCATE direkt auf Datenpages arbeitet, gibt es:
- weniger Einträge im Transaction Log,
- eine schnellere Ausführung,
- und eine bessere Speicherfreigabe.
DELETE dagegen hält alle Änderungen im Log fest, was für Recovery wichtig sein kann – aber eben mehr Speicherplatz benötigt.
7. Zusammenfassung
| Aspekt | DELETE | TRUNCATE |
|---|---|---|
| Löscht | Einzelne Zeilen (mit WHERE) | Ganze Tabelle |
| Geschwindigkeit | Langsam | Sehr schnell |
| Logging | Zeilenweise | Seitenweise (minimal) |
| WHERE möglich | ✅ Ja | ❌ Nein |
| Foreign Keys erlaubt | ✅ Ja | ❌ Nein |
| IDENTITY-Zähler | Bleibt erhalten | Wird zurückgesetzt |
| Trigger | Werden ausgeführt | Werden nicht ausgeführt |
Fazit
Wenn du gezielt einzelne Datensätze löschen möchtest – nutze DELETE.
Wenn du eine ganze Tabelle leeren, aber ihre Struktur behalten willst – ist TRUNCATE der richtige Weg.
Beide Befehle sind wichtig für effizientes Datenmanagement, besonders bei großen Datenmengen oder Wartungsaufgaben.
Verwandte Artikel auf datenanalyst.com
- SQL JOINS einfach erklärt – mit Beispielen
- Datenbereinigung in SQL – Tipps und Best Practices
- CASE WHEN in SQL – Logik statt Hilfstabellen
👉 Weitere SQL-Tipps und praxisnahe Beispiele findest du in meinen Videos auf YouTube: @datenanalyst
