-
Hvis du sletter alle rækkerne i den tabel, er den enkleste mulighed at afkorte tabel, sådan noget som
TRUNCATE TABLE LargeTable GO
Truncate table vil blot tømme tabellen, du kan ikke bruge WHERE-sætningen til at begrænse rækkerne, der slettes, og ingen triggere vil blive udløst.
-
Hvis du på den anden side sletter mere end 80-90 procent af dataene, siger du, hvis du i alt har 11 millioner rækker, og du ønsker at slette 10 millioner, ville en anden måde være at indsætte disse 1 million rækker (registreringer, du vil beholde ) til et andet iscenesættelsesbord. Afkort denne store tabel og indsæt disse 1 million rækker tilbage.
-
Eller hvis tilladelser/visninger eller andre objekter, som har denne store tabel som deres underliggende tabel, ikke bliver påvirket af at slippe denne tabel, kan du få disse relativt små mængder af rækkerne ind i en anden tabel, slippe denne tabel og oprette en anden tabel med samme skema, og importer disse rækker tilbage til denne tidligere store tabel.
-
En sidste mulighed, jeg kan komme i tanke om, er at ændre din databases
Recovery Mode to SIMPLE
og slet derefter rækker i mindre partier ved hjælp af en while-løkke, noget som dette: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
og glem ikke at ændre gendannelsestilstanden tilbage til fuld, og jeg tror, du skal tage en sikkerhedskopi for at gøre den fuldt ud effektiv (ændrings- eller gendannelsestilstande).