-
Om du tar bort alla rader i den tabellen är det enklaste alternativet att avkorta tabellen, något i stil med
TRUNCATE TABLE LargeTable GO
Trunkeringstabell kommer helt enkelt att tömma tabellen, du kan inte använda WHERE-satsen för att begränsa raderna som tas bort och inga utlösare kommer att aktiveras.
-
Å andra sidan om du tar bort mer än 80-90 procent av data, säg om du har totalt 11 miljoner rader och du vill ta bort 10 miljoner skulle ett annat sätt vara att infoga dessa 1 miljon rader (poster du vill behålla ) till ett annat mellanställningsbord. Trunkera denna stora tabell och sätt tillbaka dessa 1 miljon rader.
-
Eller om behörigheter/vyer eller andra objekt som har den här stora tabellen som underliggande tabell inte påverkas av att ta bort den här tabellen, kan du få dessa relativt små mängder av raderna till en annan tabell, släppa den här tabellen och skapa en annan tabell med samma schema och importera dessa rader tillbaka till denna ex-Large-tabell.
-
Ett sista alternativ jag kan komma på är att ändra din databas
Recovery Mode to SIMPLE
och ta sedan bort rader i mindre omgångar med hjälp av en while-loop ungefär så här: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
och glöm inte att ändra återställningsläget tillbaka till fullt och jag tror att du måste ta en säkerhetskopia för att göra det fullt effektivt (ändrings- eller återställningslägena).