Ich habe einige Tabellen, die ich als Teil meines Berichts-Rollups erstellt habe. Ich brauche sie danach überhaupt nicht mehr. Jemand erwähnte, sie abzuschneiden, da es schneller wäre.
sql
sql-server
sybase
Brian G.
quelle
quelle
Antworten:
Das Löschen von Datensätzen aus einer Tabelle protokolliert jedes Löschen und führt Löschauslöser für die gelöschten Datensätze aus. Abschneiden ist ein leistungsfähigerer Befehl, der eine Tabelle leert, ohne jede Zeile zu protokollieren. SQL Server verhindert, dass Sie eine Tabelle mit Fremdschlüsseln abschneiden, die darauf verweisen, da die Fremdschlüssel in jeder Zeile überprüft werden müssen.
Das Abschneiden ist normalerweise ultraschnell und ideal zum Bereinigen von Daten aus einer temporären Tabelle. Die Struktur der Tabelle bleibt für die zukünftige Verwendung erhalten.
Wenn Sie tatsächlich die Tabelle entfernen möchten Definitionen sowie die Daten, fallen einfach die Tabellen.
Weitere Informationen finden Sie in diesem MSDN-Artikel
quelle
DROP TABLE löscht die Tabelle.
TRUNCATE TABLE leert es, lässt aber seine Struktur für zukünftige Daten.
quelle
DROP und TRUNC machen verschiedene Dinge:
TRUNCATE TABLE
TROPFENTABELLE
In Bezug auf die Geschwindigkeit sollte der Unterschied gering sein. Und wenn Sie die Tabellenstruktur überhaupt nicht benötigen, verwenden Sie auf jeden Fall DROP.
quelle
Ich denke, Sie meinen den Unterschied zwischen DELETE TABLE und TRUNCATE TABLE.
TROPFENTABELLE
TABELLE LÖSCHEN
TRUNCATE TABLE
quelle
set the row count zero
Der Identitätswert wird tatsächlich auf den ursprünglichen Identitätsstartwert zurückgesetzt.Keine dieser Antworten weist auf einen wichtigen Unterschied zwischen diesen beiden Operationen hin. Drop Table ist eine Operation, die zurückgesetzt werden kann.
DasAbschneidenkann jedoch nicht zurückgesetzt werden['TRUNCATE TABLE' kann ebenfalls zurückgesetzt werden]. Auf diese Weise kann das Löschen einer sehr großen Tabelle sehr teuer sein, wenn viele Zeilen vorhanden sind, da alle in einem temporären Bereich aufgezeichnet werden müssen, falls Sie sie zurücksetzen möchten.Wenn ich eine große Tabelle loswerden möchte, schneide ich sie normalerweise ab und lasse sie dann fallen. Auf diese Weise werden die Daten ohne Datensatz gelöscht, und die Tabelle kann gelöscht werden. Dieser Löschvorgang ist sehr kostengünstig, da keine Daten aufgezeichnet werden müssen.
Es ist jedoch wichtig darauf hinzuweisen, dass beim Abschneiden nur Daten gelöscht werden und die Tabelle verlassen wird, während beim Löschen die Daten und die Tabelle selbst gelöscht werden. (vorausgesetzt, Fremdschlüssel schließen eine solche Aktion nicht aus)
quelle
DROP
ist im Grunde nur einTRUNCATE
gefolgt vom Löschen von Tabellenmetadaten aus den Systemtabellen. Sehen Sie diese Frage hierDROP-Tabelle
DROP TABLE [table_name];
Tabelle LÖSCHEN
DELETE FROM [table_name] WHERE [condition]; DELETE FROM [table_name];
TRUNCATE-Tabelle
TRUNCATE TABLE [table_name];
quelle
TRUNCATE TABLE behält Ihre gesamte alte Indizierung und so weiter. DROP TABLE würde die Tabelle natürlich entfernen und Sie müssen sie später neu erstellen.
quelle
Drop entfernt die Tabelle vollständig und entfernt auch die Definition. Durch Abschneiden wird die Tabelle geleert, die Definition wird jedoch nicht entfernt.
quelle
Durch Abschneiden der Tabelle wird die Tabelle geleert. Durch das Löschen der Tabelle wird sie vollständig gelöscht. Beides wird schnell sein, aber das Löschen wird wahrscheinlich schneller sein (abhängig von Ihrer Datenbank-Engine).
Wenn Sie es nicht mehr benötigen, lassen Sie es fallen, damit Ihr Schema nicht überladen wird.
quelle
TableA anstelle von TRUNCATE TableA LÖSCHEN? Ein häufiges Missverständnis ist, dass sie dasselbe tun. Nicht so. In der Tat gibt es viele Unterschiede zwischen den beiden.
DELETE ist eine protokollierte Operation pro Zeile. Dies bedeutet, dass das Löschen jeder Zeile protokolliert und physisch gelöscht wird.
Sie können jede Zeile LÖSCHEN, die nicht gegen eine Einschränkung verstößt, während Sie den Fremdschlüssel oder eine andere Einschränkung beibehalten.
TRUNCATE ist ebenfalls eine protokollierte Operation, jedoch auf andere Weise. TRUNCATE protokolliert die Freigabe der Datenseiten, auf denen die Daten vorhanden sind. Die Freigabe von Datenseiten bedeutet, dass Ihre Datenzeilen tatsächlich noch auf den Datenseiten vorhanden sind, die Bereiche jedoch zur Wiederverwendung als leer markiert wurden. Dies macht TRUNCATE zu einer schnelleren Operation, die über DELETE ausgeführt werden kann.
Sie können eine Tabelle mit Fremdschlüsseleinschränkungen nicht TRUNCATE. Sie müssen die Einschränkungen entfernen, die Tabelle TRUNCATE und die Einschränkungen erneut anwenden.
TRUNCATE setzt alle Identitätsspalten auf den Standard-Startwert zurück.
quelle
Beim Abschneiden werden alle Zeilen entfernt, jedoch nicht die Tabelle selbst. Dies entspricht im Wesentlichen dem Löschen ohne where-Klausel, ist jedoch normalerweise schneller.
quelle
Ich habe eine Korrektur für eine der obigen Aussagen ... "Abschneiden kann nicht zurückgesetzt werden"
Abschneiden kann zurückgesetzt werden. In einigen Fällen können Sie keine Tabelle zum Abschneiden oder Löschen erstellen, z. B. wenn Sie eine Fremdschlüsselreferenz haben. Für eine Aufgabe wie die monatliche Berichterstattung würde ich den Tisch wahrscheinlich einfach fallen lassen, wenn ich ihn nicht mehr benötige. Wenn ich dieses Rollup-Reporting häufiger durchführen würde, würde ich wahrscheinlich stattdessen die Tabelle behalten und "Abschneiden" verwenden.
Hoffe das hilft, hier sind einige weitere Informationen, die Sie nützlich finden sollten ...
Weitere Informationen finden Sie im folgenden Artikel: http://sqlblog.com/blogs/denis_gobo/archive/2007/06/13/1458.aspx
Weitere Informationen zu Löschen und Abschneiden finden Sie in diesem Artikel: http://www.sql-server-performance.com/faq/delete_truncate_difference_p1.aspx
Vielen Dank! Jeff
quelle
Von http://msdn.microsoft.com/en-us/library/aa260621(SQL.80).aspx
quelle
Im SQL-Standard entfernt die DROP-Tabelle die Tabelle und das Tabellenschema - TRUNCATE entfernt alle Zeilen.
quelle
Die Antworten hier stimmen mit der Frage überein, aber ich werde die Frage beantworten, die Sie nicht gestellt haben. "Soll ich Abschneiden oder Löschen verwenden?" Wenn Sie alle Zeilen aus einer Tabelle entfernen, möchten Sie normalerweise abschneiden, da dies viel schneller ist. Warum ist es viel schneller? Zumindest im Fall von Oracle wird die Hochwassermarke zurückgesetzt . Dies ist im Grunde eine Dereferenzierung der Daten und ermöglicht es der Datenbank, sie für etwas anderes wiederzuverwenden.
quelle
LÖSCHEN GEGEN TRUNCATE
DELETE
Anweisung entfernt die Zeilen einzeln und zeichnet für jede gelöschte Zeile einen Eintrag im Transaktionsprotokoll auf.TRUNCATE TABLE
Entfernt die Daten durch Freigabe der zum Speichern der Tabellendaten verwendeten Datenseiten und zeichnet nur die Freigaben der Seite im Transaktionsprotokoll aufWHERE
Klausel in verwenden,DELETE
aber in könnenTRUNCATE
Sie sie nicht verwendenDELETE
Anweisung mit einer Zeilensperre ausgeführt wird, wird jede Zeile in der Tabelle zum Löschen gesperrt.TRUNCATE TABLE
Sperrt immer die Tabelle und die Seite, aber nicht jede ZeileDELETE
Anweisung ausgeführt wurde, kann die Tabelle noch leere Seiten enthalten. Wenn beim Löschvorgang keine Tabellensperre verwendet wird, enthält die Tabelle (Heap) viele leere Seiten. Bei Indizes kann der Löschvorgang leere Seiten zurücklassen, obwohl dieseSeiten durch einen Hintergrundbereinigungsprozess schnell freigegeben werden
TRUNCATE TABLE
Entfernt alle Zeilen aus einer Tabelle, aber die Tabellenstruktur und ihre Spalten, Einschränkungen, Indizes usw. bleiben erhaltenDELETE
Anweisung ist keineRESEED
Identitätsspalte, sondernTRUNCATE
AnweisungRESEEDS
dieIDENTITY
SpalteTRUNCATE TABLE
für Tabellen verwenden, die:FOREIGN KEY
Einschränkung referenziert . (Sie können eine Tabelle mit einem Fremdschlüssel abschneiden, der auf sich selbst verweist.)TRUNCATE TABLE
Ein Trigger kann nicht aktiviert werden, da bei der Operation keine einzelnen Zeilenlöschungen protokolliert werdenquelle
Delete-Anweisung Löschen Sie Tabellenzeilen und geben Sie die Anzahl der Zeilen zurück, die aus der Tabelle gelöscht wurden. In dieser Anweisung verwenden wir die where-Klausel, um Daten aus der Tabelle zu löschen
Anweisung abschneiden Löscht oder entfernt alle Zeilen aus der Tabelle.
Die Drop-Anweisung löschte alle Datensätze sowie die Struktur der Tabelle
quelle
Drop Drop ganze Tabelle und ihre gesamte Struktur
truncate löschen alle Zeilen aus der Tabelle unterscheidet es sich von löschen ist , dass es auch löschen Indizes der Zeilen
quelle
Von: http://www.orafaq.com/faq/difference_between_truncate_delete_and_drop_commands
quelle