-
Se stai eliminando tutte le righe in quella tabella, l'opzione più semplice è troncare la tabella, qualcosa come
TRUNCATE TABLE LargeTable GO
Tronca la tabella svuoterà semplicemente la tabella, non puoi utilizzare la clausola WHERE per limitare l'eliminazione delle righe e non verrà attivato alcun trigger.
-
D'altra parte, se stai eliminando più dell'80-90 Percento dei dati, supponi che se hai un totale di 11 milioni di righe e desideri eliminarne 10 milioni, un altro modo sarebbe inserire questi 1 milione di righe (record che vuoi conservare ) su un altro tavolo di staging. Tronca questa grande tabella e reinserisci queste 1 milione di righe.
-
Oppure se autorizzazioni/viste o altri oggetti che hanno questa tabella grande come tabella sottostante non vengono interessati dall'eliminazione di questa tabella, puoi ottenere queste quantità relativamente piccole di righe in un'altra tabella, eliminare questa tabella e creare un'altra tabella con lo stesso schema e importa nuovamente queste righe in questa ex tabella Large.
-
Un'ultima opzione che mi viene in mente è cambiare la
Recovery Mode to SIMPLE
e quindi elimina le righe in batch più piccoli utilizzando un ciclo while simile a questo: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
e non dimenticare di riportare la modalità di ripristino a piena e penso che devi fare un backup per renderlo completamente efficace (la modifica o le modalità di ripristino).