Voglio eliminare circa il 90% delle righe da una tabella di milioni + di righe. Qualche cosa posso fare per renderlo più veloce? per esempio. se accendo la modalità di recupero semplice, questo aiuto?Come eseguire un DELETE rapido di molti dati da una tabella di grandi dimensioni (server sql)
risposta
Copia le righe che non vuoi eliminare in una tabella temporanea utilizzando select into e quindi truncate la tabella anziché eliminare. Copia le righe nella vecchia tabella. Ricordare prima il numero drop contraints.
Se si dispone di colonne di identità, dopo aver preso in affitto i dati, utilizzare qualcosa come questo per eseguire il reseeding della tabella.
declare @seed int
select @seed = max(identity_col)+1 from tableName
DBCC CHECKIDENT (orders, table_name, @seed)
Dato che si desidera eliminare il 90% di righe, potrebbe essere più veloce per SELECT INTO quei 10% righe che si desidera conservare in una nuova tabella.
Se non è possibile copiare il resto a un altro tavolo, poi tronca e copiare di nuovo ...
... lasciando cadere gli indici è l'unica cosa che si può fare la programmazione saggia. In questo caso è possibile ridurre gli indici e ricrearli.
... o ottenere un sottosistema di dischi più veloce, principalmente per i dati.
La modalità di ripristino non aiuta - la modalità di ripristino indica che il registro è cancellabile immediatamente dopo il commit (può essere implicito), ma non c'è nulla in esso che eviti che le voci del registro vengano scritte.
Aggiungi un IsDeleted (BIT)
contrassegno, imposta quello a 1 per quelli 90% e crea una visualizzazione sulla tabella che mostra solo le righe con IsDeleted=0
.
L'eliminazione è sempre a) un'operazione a uso intensivo di risorse eb) distrugge qualsiasi possibilità di responsabilità. Cercherò di evitarlo, se possibile, per entrambi i motivi (prestazioni e distruzione dei dati). Usa invece l'approccio "soft delete".
bello! Ho colonne di identità quindi dovrei occuparmene, ma va bene. – Rory
+1 - Questo è minimo registrato almeno dal 2005 (non sono sicuro delle versioni precedenti) quindi dovrebbe essere super veloce. Ricordare il tempo necessario per ricostruire gli indici. – JNK