sql >> Base de Datos >  >> RDS >> Sqlserver

¿Cómo eliminar grandes datos de la tabla en SQL sin registro?

  1. 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.

  1. 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.

  2. 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.

  3. 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).