Der Unterschied zwischen drop table und truncate table?
-
02-07-2019 - |
Frage
Ich habe einige Tabellen, die ich als Teil meines Berichts Rollup bauen. Ich brauche sie nicht danach überhaupt. Jemand erwähnte, sich zu kürzen, da es schneller sein würde.
Lösung
Datensätze aus einer Tabelle löschen protokolliert jede Löschung und führt gelöscht Auslöser für die Datensätze löschen. Kürzen ist ein mächtiger Befehl, der eine Tabelle leert, ohne jede anzumelden. SQL Server verhindert, dass Sie eine Tabelle mit Fremdschlüssel verweist es abgeschnitten wird, wegen der Notwendigkeit, die Fremdschlüssel in jeder Zeile zu überprüfen.
Kürzen ist normalerweise extrem schnell, ideal für Daten aus einer temporären Tabelle Reinigung aus. Es spielt die Erhaltung der Struktur der Tabelle für die zukünftige Verwendung.
Wenn Sie tatsächlich in der Tabelle entfernen möchten Definitionen sowie die Daten, einfach die Tabellen löschen.
Siehe in diesem MSDN-Artikel für weitere Informationen
Andere Tipps
DROP TABLE löscht die Tabelle.
TRUNCATE TABLE leert es, lässt aber seine Struktur für zukünftige Daten.
DROP und TRUNC verschiedene Dinge tun:
TRUNCATE TABLE
Entfernt alle Zeilen aus einer Tabelle ohne Protokollierung der einzelnen Zeilen Löschungen. TRUNCATE TABLE ist ähnlich wie die DELETE-Anweisung ohne WHERE-Klausel; jedoch TRUNCATE TABLE ist schneller und verwendet weniger System- und Transaktionsprotokoll Ressourcen.
DROP TABLE
Entfernt eine oder mehr Tabellendefinitionen und alle Daten, Indizes, Trigger, Einschränkungen und Erlaubnis Spezifikationen für diese Tabellen.
Was Geschwindigkeit der Unterschied sollte klein sein betroffen ist. Und wie auch immer, wenn Sie überhaupt die Tabellenstruktur nicht benötigen, sicher DROP verwenden.
Ich glaube, Sie bedeutet den Unterschied zwischen DELETE TABLE und TRUNCATE TABLE.
DROP TABLE
entfernen Sie die Tabelle aus der Datenbank.
Tabelle löschen
ohne Bedingung alle Zeilen löschen. Wenn es Trigger und Referenzen, dann wird dies für jede Zeile verarbeiten. Auch wird ein Index ändern, wenn es ein.
TRUNCATE TABLE
stellen Sie die Zeilenanzahl Null und ohne jede anzumelden. Dass es viel schneller als die anderen beiden.
Keine dieser Antwort darauf einen wichtigen Unterschied zu diesen beiden Operationen aus. Drop-Tabelle ist ein Vorgang, der rückgängig gemacht werden kann. Allerdings kann truncate nicht rückgängig gemacht werden [ 'TRUNCATE TABLE kann auch zurück gerollt werden]. Auf dieser Art und Weise einen sehr großen Tisch fallen kann sehr teuer werden, wenn es viele Reihen, weil sie alle in einem temporären Raum aufgezeichnet werden müssen, falls Sie sich entscheiden, sie wieder zu rollen.
Normalerweise, wenn ich loswerden einen großen Tisch zu bekommen, werde ich es abschneiden, dann fallen lassen. Auf diese Weise werden die Daten ohne Aufzeichnung nixed werden, und die Tabelle gelöscht werden kann, und dass Tropfen wird sehr kostengünstig, da keine Daten aufgezeichnet werden muss.
Es ist wichtig, darauf hinzuweisen, obwohl das truncate nur Daten löscht, den Tisch verlassen, während Tropfen wird in der Tat, die Daten löschen und die Tabelle selbst. (Unter der Annahme, Fremdschlüssel nicht ausschließen, eine solche Aktion)
TRUNCATE TABLE hält alle Ihre alten Indizierung und so weiter. DROP TABLE würde offensichtlich loswerden den Tisch und verlangen, dass Sie es später neu zu erstellen.
DROP Table
DROP TABLE [table_name];
Der DROP-Befehl wird verwendet, um eine Tabelle aus der Datenbank zu entfernen. Es ist ein DDL-Befehl. Alle Zeilen, Indizes und Privilegien der Tabelle werden ebenfalls entfernt. DROP Vorgang kann nicht mehr rückgängig gemacht werden.
DELETE Tabelle
DELETE FROM [table_name]
WHERE [condition];
DELETE FROM [table_name];
Der DELETE-Befehl ist ein DML-Befehl. Es kann verwendet werden, um alle Zeilen zu löschen oder einige Zeilen aus der Tabelle unter der Bedingung in WHERE-Klausel angegeben basiert. Es wird ausgeführt, eine Zeilensperre verwendet wird, jede Zeile in der Tabelle ist zum Löschen gesperrt. Es hält das Transaktionsprotokoll, so ist es langsamer als TRUNCATE. DELETE-Operationen werden kann rückgängig gemacht.
TRUNCATE Tabelle
TRUNCATE TABLE [table_name];
Der TRUNCATE Befehl löscht alle Zeilen aus einer Tabelle. Es wird die Streichung jeder Zeile nicht anmelden, sondern protokolliert er die Aufhebung der Zuordnung der Datenseiten der Tabelle, die es schneller als DELETE macht. Es wird mit einer Tabellensperre ausgeführt und ganz Tabelle gesperrt ist für alle Datensätze zu entfernen. Es ist ein DDL-Befehl. TRUNCATE-Operationen können nicht rückgängig gemacht werden.
Drop wird komplett aus der Tabelle entfernen, sowie die Definition zu entfernen. Kürzen leert den Tisch, aber wird nicht von der Definition los zu werden.
die Tabelle Kürzen leert den Tisch. die Tabelle löschen löscht sie vollständig. Entweder man wird schnell, aber dropping es wahrscheinlich schneller wird (abhängig von Ihrem Datenbank-Engine).
Wenn Sie es nicht mehr benötigen, lassen Sie sie es so nicht Ihr Schema unübersichtlich.
DELETE TableA statt TRUNCATE TableA? Ein verbreiteter Irrtum ist, dass sie das gleiche tun. Nicht damit. In der Tat gibt es viele Unterschiede zwischen den beiden.
DELETE ist eine protokollierte Operation auf einer Pro-Reihe-Basis. Das heisst dass das Löschen jeder Zeile wird protokolliert und physikalisch gelöscht.
Sie können jede Zeile löschen, die nicht eine Einschränkung verletzen, während die Fremdschlüssel oder andere contraint anstelle verlassen.
TRUNCATE ist auch eine protokollierte Operation, aber in einer anderen Art und Weise. TRUNCATE protokolliert die Aufhebung der Zuordnung der Datenseiten in dem die Daten existiert. Die Aufhebung der Zuordnung von Datenseiten bedeutet, dass Ihre Daten Zeilen existieren tatsächlich noch in den Datenseiten, aber die Ausdehnungen wurden als leer zur Wiederverwendung gekennzeichnet. Das ist was macht TRUNCATE eine schnellere Operation DELETE auszuführen über.
Sie können keine Tabelle TRUNCATE, die jeden Fremdschlüssel hat Einschränkungen. Sie werden die contraints entfernen müssen, Kürzen Sie die Tisch, und die contraints erneut anwenden.
TRUNCATE wird zurückgesetzt keine Identitätsspalten auf das Standardsaatgut Wert.
truncate entfernt all Zeilen, aber nicht die Tabelle selbst, es ist im Wesentlichen gleichwertig mit keiner where-Klausel zu löschen, aber in der Regel schneller.
Ich habe eine Korrektur für einen der oben getroffenen Aussagen ... „truncate nicht rückgängig gemacht werden kann“
Kürzen kann rückgängig gemacht werden. Es gibt einige Fälle, in denen Sie keine truncate oder Drop-Tabelle tun, wie zum Beispiel, wenn Sie eine Fremdschlüssel-Referenz haben. Für eine Aufgabe wie die monatliche Berichterstattung, würde ich wahrscheinlich fallen nur die Tabelle, wenn ich es nicht mehr benötigen. Wenn ich dieses Rollup tat mehr berichten oft, dann würde ich wahrscheinlich die Tabelle halten statt und truncate verwenden.
Hope, das hilft, hier einige weitere Informationen, die Ihnen nützlich sollten ...
Bitte beachten Sie die folgenden Artikel für weitere Informationen: http://sqlblog.com/blogs/denis_gobo/archive/ 2007/06/13 / 1458.aspx
Auch für weitere Details zu löschen vs. truncate finden Sie in diesem Artikel: http://www.sql-server-performance.com/faq/delete_truncate_difference_p1. aspx
Danke! Jeff
TRUNCATE TABLE ist funktionell identische Aussage ohne DELETE WHERE-Klausel: beide entfernen Sie alle Zeilen in Der Tisch. Aber TRUNCATE TABLE ist schneller und verbraucht weniger System und Transaktionsprotokoll Ressourcen als DELETE.
Die DELETE-Anweisung entfernt Reihen zu einem Zeitpunkt, und zeichnet einen Eintrag in der Transaktionsprotokoll für jede Zeile gelöscht. TRUNCATE TABLE löscht die Daten durch Aufheben der Zuordnung der Datenseiten verwendet speichert die Daten der Tabelle und nur die Seite Aufheben dieser Zuordnungen sind in der aufgezeichneten Transaktionsprotokoll.
TRUNCATE TABLE löscht alle Zeilen aus einer Tisch, aber die Tabellenstruktur und ihre Spalten, Einschränkungen, Indizes und so eingeschaltet bleiben. Der Zähler um eine verwendeten Identität für neue Zeilen wird wieder auf die Saatgut für die Spalte. Wenn du möchtest die Identität Zähler behalten, verwenden DELETE statt. Wenn Sie möchten, entfernen Tabellendefinition und ihre Daten, verwenden DROP TABLE-Anweisung.
Sie können nicht TRUNCATE TABLE auf eine Verwendung Tabelle durch einen Fremdschlüssel verwiesen Zwang; Verwenden Sie stattdessen DELETE Anweisung ohne eine WHERE-Klausel. Da TRUNCATE TABLE ist nicht angemeldet, es kann keinen Trigger aktivieren.
TRUNCATE TABLE nicht verwendet werden darf auf Tabellen in einer indexierten Teilnahme Ansicht.
http://msdn.microsoft.com /en-us/library/aa260621(SQL.80).aspx
In dem SQL-Standard entfernt DROP Tabelle die Tabelle und das Tabellenschema -. TRUNCATE alle Zeilen entfernt
Die Antworten hier passen auf die Frage, aber ich werde die Frage beantworten, die Sie nicht fragen. „Sollte ich gestutzt oder löschen?“ Wenn Sie alle Zeilen aus einer Tabelle entfernen möchte, sollten Sie in der Regel kürzen, da es viel viel schneller ist. Warum ist es viel schneller? Zumindest im Fall von Oracle, setzt sie die Hochwassermarke . Dies ist im Grunde ein dereferenzierenden der Daten und ermöglicht es dem db es für etwas wiederzuverwenden anderes.
DELETE VS TRUNCATE
- Die
DELETE
Anweisung entfernt Zeilen einen nach dem anderen und nimmt einen Eintrag in der Transaktion Protokoll für jeden gelöschten Zeile.TRUNCATE TABLE
entfernt die Daten durch die Daten freigibt, Seiten verwendet, um die Tabellendaten zu speichern und speichert nur die Seite Zuordnungsaufhebungen in der Transaktionsprotokoll - Wir können
WHERE
Klausel inDELETE
verwenden, aber inTRUNCATE
können Sie es nicht verwenden - Wenn die
DELETE
Anweisung ausgeführt wird eine Zeilensperre verwendet wird, wird jede Zeile in der Tabelle gesperrt zum Löschen.TRUNCATE TABLE
immer sperrt die Tabelle und Seite aber nicht jede Zeile - Nach einer
DELETE
Anweisung ausgeführt wird, kann die Tabelle noch leer enthalten pages.If die Löschvorgang eine Tabellensperre, die Tabelle (Heap) viele enthält nicht leer verwenden Seiten. Bei Indizes kann der Löschvorgang leere Seiten hinter sich lassen, obwohl diese
Seiten werden von einem Hintergrund-Cleanup-Prozess ausgeplant schnell werden -
TRUNCATE TABLE
entfernt alle Zeilen aus einer Tabelle, aber die Tabellenstruktur und ihre Spalten, Einschränkungen, Indizes und bleiben so auf -
DELETE
AnweisungRESEED
nicht Identitätsspalte aberTRUNCATE
AussageRESEEDS
dieIDENTITY
Spalte - Sie können nicht
TRUNCATE TABLE
auf Tabellen verwenden, die:- durch eine
FOREIGN KEY
Einschränkung verwiesen. (Sie können eine Tabelle gestutzt, die eine hat Fremdschlüssel, der auf sich selbst verweist.) - in einer indizierten Sicht Teilnehmen.
- mithilfe von Transaktionsreplikation oder Mergereplikation veröffentlicht
- durch eine
-
TRUNCATE TABLE
können keinen Trigger aktivieren, da der Vorgang nicht einzelne anmeldet Zeilenlöschungen
Löschen Statement
Löschen Statement Tabellenzeilen löscht und gibt die Anzahl der Zeilen aus der table.in dieser Anweisung gelöscht wird, verwenden wir where-Klausel, um gelöschte Daten aus der Tabelle
- Statement Löschen ist langsamer als Truncate Aussage, weil es Aufzeichnungen einzeln gelöscht
Kürzen Statement
Kürzen Anweisung gelöscht oder Entfernen Sie alle Zeilen aus der Tabelle.
- Es ist schneller als die DELETE-Anweisung, weil es alle Datensätze aus der Tabelle gelöscht
- Kürzen Anweisung nicht wieder die Anzahl der Zeilen aus der Tabelle gelöscht werden
Drop-Anweisung
Drop-Anweisung gelöscht alle Datensätze sowie die Struktur der Tabelle
DELETE
Der DELETE-Befehl wird verwendet, um Zeilen aus einer Tabelle zu entfernen. Eine WHERE-Klausel verwendet werden kann, entfernen nur einige Zeilen. Wenn keine WHERE-Bedingung angegeben ist, werden alle Zeilen entfernt. Nachdem ein Löschvorgang durchführen müssen Sie COMMIT oder die Transaktion verbucht, um die Änderung dauerhaft zu machen oder sie rückgängig zu machen.
TRUNCATE
TRUNCATE entfernt alle Zeilen aus einer Tabelle. Der Vorgang kann nicht ... Als solche zurückgerollt werden, TRUCATE schneller ist und verwenden Sie nicht so viel rückgängig Raum als DELETE.
Von: http://www.orafaq.com/faq/difference_between_truncate_delete_and_drop_commands
Drop Drop ganzen Tisch und all seine Struktur
truncate löschen Sie alle Zeilen aus der Tabelle es unterscheidet sich von löschen, dass es auch Indizes der Zeilen löschen