Theoretisch würde man das Optimum – wie bei insert
auch – beim Löschen aus einer Tabelle ohne Index erwarten. Dafür muss die Datenbank die Tabelle aber vollständig lesen, um die zu löschende Zeile zu finden – schließlich gibt es keinen Index. Das heißt, dass das Löschen zwar schnell wäre, die Suche aber sehr langsam. Daher ist dieser Fall in Abbildung 8.2, „Delete-Performance abhängig von der Indexzahl“ nicht dargestellt.
Dennoch kann es Sinn machen, eine delete
-Anweisung ohne Index auszuführen. Genauso wie es Sinn machen kann, eine select
-Abfrage ohne Index auszuführen, wenn sie einen großen Teil der Tabelle liefert.
Auch delete
- und update
-Anweisungen haben einen Ausführungsplan.
Eine delete
-Anweisung ohne where
-Klausel ist das naheliegende Beispiel dafür. Das ist aber ein Spezialfall, für den es sogar ein eigenes SQL-Kommando gibt: truncate table
. Die truncate table
-Anweisung hat denselben Effekt wie eine delete
-Anweisung ohne where
-Klausel, löscht aber alle Zeilen auf einmal. Das ist zwar extrem schnell, hat aber zwei wichtige Nebenwirkungen: (1) es erfolgt ein implizites commit
(Ausnahmen: PostgreSQL und SQL Server); (2) es werden keine Trigger ausgeführt.
Du kannst nicht alles an einem Tag lernen. Abonniere den Newsletter via E-Mail, Bluesky oder RSS um sukzessive aufzuholen. Und sieh dir auch modern-sql.com an.
Markus verwandelt veraltetes SQL-92-Wissen in solides und zeitgemäßes SQL-Know-how