-
Als u alle rijen in die tabel verwijdert, is de eenvoudigste optie om de tabel in te korten, zoiets als
TRUNCATE TABLE LargeTable GO
Truncate-tabel zal de tabel gewoon leegmaken, u kunt de WHERE-clausule niet gebruiken om de rijen te beperken die worden verwijderd en er worden geen triggers geactiveerd.
-
Aan de andere kant, als u meer dan 80-90 procent van de gegevens verwijdert, bijvoorbeeld als u in totaal 11 miljoen rijen heeft en u wilt 10 miljoen verwijderen, zou een andere manier zijn om deze 1 miljoen rijen in te voegen (records die u wilt behouden ) naar een andere verzameltabel. Kap deze grote tabel af en voeg deze 1 miljoen rijen terug.
-
Of als permissies/views of andere objecten die deze grote tabel als onderliggende tabel hebben niet worden beïnvloed door deze tabel te verwijderen, kunt u deze relatief kleine hoeveelheden van de rijen in een andere tabel plaatsen, deze tabel laten vallen en een andere tabel maken met dezelfde schema, en importeer deze rijen terug in deze ex-grote tabel.
-
Een laatste optie die ik kan bedenken is om de
Recovery Mode to SIMPLE
en verwijder vervolgens rijen in kleinere batches met behulp van een while-lus, zoiets als dit: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
en vergeet niet om de herstelmodus terug te zetten naar volledig en ik denk dat je een back-up moet maken om deze volledig effectief te maken (de wijzigings- of herstelmodi).