-
Si está eliminando todas las filas de esa tabla, la opción más sencilla es truncar la tabla, algo como
TRUNCATE TABLE LargeTable GO
Truncar la tabla simplemente vaciará la tabla, no puede usar la cláusula WHERE para limitar las filas que se eliminan y no se activará ningún activador.
-
Por otro lado, si está eliminando más del 80-90 por ciento de los datos, digamos que tiene un total de 11 millones de filas y desea eliminar 10 millones, otra forma sería Insertar estas 1 millón de filas (registros que desea conservar ) a otra mesa de ensayo. Trunca esta tabla grande e inserta de nuevo estas 1 millón de filas.
-
O si los permisos/vistas u otros objetos que tienen esta tabla grande como su tabla subyacente no se ven afectados al eliminar esta tabla, puede obtener estas cantidades relativamente pequeñas de filas en otra tabla, eliminar esta tabla y crear otra tabla con el mismo esquema e importe estas filas de nuevo en esta tabla ex-Large.
-
Una última opción que se me ocurre es cambiar el
Recovery Mode to SIMPLE
y luego elimine filas en lotes más pequeños usando un ciclo while algo como esto: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
y no olvide volver a cambiar el modo de recuperación a completo y creo que debe realizar una copia de seguridad para que sea completamente efectivo (los modos de cambio o recuperación).