-
Wenn Sie alle Zeilen in dieser Tabelle löschen, ist die einfachste Option, die Tabelle abzuschneiden, so etwas wie
TRUNCATE TABLE LargeTable GO
Truncate table leert einfach die Tabelle, Sie können die WHERE-Klausel nicht verwenden, um die zu löschenden Zeilen zu begrenzen, und es werden keine Trigger ausgelöst.
-
Wenn Sie andererseits mehr als 80-90 Prozent der Daten löschen, sagen wir, wenn Sie insgesamt 11 Millionen Zeilen haben und 10 Millionen löschen möchten, wäre eine andere Möglichkeit, diese 1 Million Zeilen einzufügen (Datensätze, die Sie behalten möchten ) zu einer anderen Bereitstellungstabelle. Schneiden Sie diese große Tabelle ab und fügen Sie diese 1 Million Zeilen wieder ein.
-
Oder wenn Berechtigungen/Ansichten oder andere Objekte, die diese große Tabelle als zugrunde liegende Tabelle haben, nicht durch das Löschen dieser Tabelle betroffen sind, können Sie diese relativ kleinen Mengen der Zeilen in eine andere Tabelle verschieben, diese Tabelle löschen und eine andere Tabelle mit derselben erstellen Schema, und importieren Sie diese Zeilen zurück in diese ex-Large-Tabelle.
-
Eine letzte Möglichkeit, die mir einfällt, besteht darin, den
Recovery Mode to SIMPLE
zu ändern und löschen Sie dann Zeilen in kleineren Stapeln mit einer While-Schleife wie dieser:DECLARE @Deleted_Rows INT; SET @Deleted_Rows = 1; WHILE (@Deleted_Rows > 0) BEGIN -- Delete some small number of rows at a time DELETE TOP (10000) LargeTable WHERE readTime < dateadd(MONTH,-7,GETDATE()) SET @Deleted_Rows = @@ROWCOUNT; END
und vergessen Sie nicht, den Wiederherstellungsmodus wieder auf vollständig zu ändern, und ich denke, Sie müssen ein Backup erstellen, um ihn vollständig wirksam zu machen (die Änderungs- oder Wiederherstellungsmodi).