lösche alles aus der Tabelle

73

Was ist schneller?

DELETE FROM table_name;

oder

DELETE FROM table_name where 1=1;

Warum?

funktioniert truncate tableim Zugang?

Alex Gordon
quelle
3
Für welche Datenbank? Für welchen Tisch? Für welche Datengröße?
Brian Neal
2
Was haben Sie herausgefunden, als Sie die von beiden benötigte Zeit gemessen haben?
Greg Hewgill
1
Vielleicht interessieren Sie auch die Antworten auf Warum sollte jemand WHERE 1 = 1 AND <Bedingungen> in einer SQL-Klausel verwenden? .
Greg Hewgill
1
Ähm, bin ich der einzige, der bemerkt, dass dies ein Fehler ist, der DELETE * FROManstelle von verwendet wird DELETE FROM? Ich habe jemanden gefunden, der dies versehentlich in den Code eingefügt hat, und habe gesucht, wie häufig es ist. Ich habe auch einen Testtisch gemacht und sicher keine Freude mit dem Sternchen.
Beenden Sie den
1
Für MS-Access DELETE * FROMist das richtig. Diese Frage ist ein Chaos, da sie sowohl für [mysql] als auch für [ms-access] Antworten gesammelt hat.
Andre

Antworten:

156

Sie können die folgende Abfrage verwenden, um alle Zeilen aus der Tabelle zu entfernen. Beachten Sie auch, dass dadurch auch die Identität zurückgesetzt wird.

TRUNCATE TABLE table_name
Jaymz
quelle
3
Nein, hätte geholfen, wenn Sie Access in Ihrer ursprünglichen Frage erwähnt hätten. In diesem Fall erledigt DELETE FROM table_name die Aufgabe am schnellsten, wie unten beantwortet.
Jaymz
3
Beachten Sie, dass dadurch TRUNCATEalle AUTO_INCREMENTZählungen in MySQL-Tabellen zurückgesetzt werden (nicht sicher, ob MS Access über so etwas verfügt).
BoltClock
3
Access verwaltet kein Transaktionsprotokoll, weshalb die Anweisung TRUNCATE nicht erforderlich ist und der Tabellenname DELETE FROM die Aufgabe gut erledigt.
Jaymz
2
Es ist zu beachten, dass DELETE und TRUNCATE nicht dasselbe sind. TRUNCATE hat Nebenwirkungen und erfordert normalerweise mehr Berechtigungen zur Ausführung.
Donald Byrd
35

Das sollte schneller gehen:

DELETE * FROM table_name;

weil RDBMS nicht schauen muss, whereist was.

Sie sollten jedoch in Ordnung sein mit truncate:

truncate table table_name
Sarfraz
quelle
1
Nein, es wird in Access nicht unterstützt.
Jaymz
Jet behandelt DELETE * FROM Table als abgeschnitten, anstatt die Datensätze einzeln zu löschen. Ich glaube jedoch nicht, dass der Startwert für die Autonummer zurückgesetzt wird. Dies muss in Code oder mit einem Compact erfolgen (nicht einmal sicher, ob es in den letzten Iterationen von Jet / ACE mit einem Compact zurückgesetzt wird).
David-W-Fenton
Ich kann bestätigen, dass ein Compact, wenn alle Datensätze aus einer Access-Tabelle gelöscht werden, den Autonumber-Startwert in Access 2016 zurücksetzt.
Ben
12

Dadurch wird die Tabelle gelöscht table_name.

Ersetzen Sie es durch den Namen der Tabelle, die gelöscht werden soll.

DELETE FROM table_name;
Oladimeji Ajeniya
quelle
11

Es gibt einen mySQL-Fehlerbericht aus dem Jahr 2004, der noch eine gewisse Gültigkeit zu haben scheint. Es scheint, dass dies in 4.x am schnellsten war:

DROP table_name
CREATE TABLE table_name

TRUNCATE table_namewar damals DELETE FROMintern und lieferte keinen Leistungsgewinn.

Dies scheint sich geändert zu haben, jedoch nur in 5.0.3 und jünger. Aus dem Fehlerbericht:

[11. Januar 2005, 16:10 Uhr] Marko Mäkelä

Ich habe jetzt die schnelle TRUNCATE TABLE implementiert, die hoffentlich in MySQL 5.0.3 enthalten sein wird.

Pekka
quelle
-4

Sie können auch Abschneiden verwenden.

truncate table table_name;
Altai Akkus
quelle
2
Diese Lösung war sieben Jahre vor dem Posten dieser Antwort in mindestens drei Antworten enthalten. Bitte nehmen Sie sich die Zeit, um alle vorhandenen Antworten zu lesen, bevor Sie Ihre Nachricht veröffentlichen.
TylerH