(Este fue originalmente un comentario a la respuesta de @ DaveE, pero lo puse en su propia respuesta porque se alargó)
TRUNCATE
Es una operación registrada. Tiene que ser de otra manera no es compatible con ACID. Sin embargo, las diferencias entre TRUNCATE
y DELETE
:
- Uso de espacio de registro:
TRUNCATE
solo registra páginas / extensiones * liberadas, mientras que DELETE
registra filas individuales.
- Uso de bloqueo:
TRUNCATE
generalmente usará menos bloqueos, ya que requiere un bloqueo de tabla y bloqueos de página, en lugar de DELETE
usar bloqueos de fila **.
IDENTITY
secuencias: TRUNCATE
restablece la secuencia de identidad en una tabla, si está presente.
(* Una extensión = 8 páginas. TRUNCATE
Registrará / eliminará extensiones si son todas de esa tabla, de lo contrario registrará / eliminará páginas de extensiones mixtas.
** Un efecto secundario de esto es que DELETE FROM TABLE
potencialmente puede dejar páginas vacías asignadas a la tabla, dependiendo de si la operación puede obtener un bloqueo exclusivo de la tabla o no).
Entonces (volviendo a la pregunta original), TRUNCATE TABLE
es definitivamente mejor que DELETE FROM TABLE
si está vaciando la tabla pero quiere mantener la estructura (NB: TRUNCATE
no se puede usar en una tabla a la que hace referencia una clave externa de otra tabla).
Como se señaló en el comentario de @ Tullo, también verifique el modelo de recuperación de su base de datos: si está lleno, entonces debe comenzar a tomar copias de seguridad de registros o cambiar su modelo de recuperación a simple. Una vez que haya hecho cualquiera de estos, probablemente desee reducir su archivo de registro como una operación única (NB: solo archivo de registro ) para reclamar todo ese espacio libre.
Finalmente, otra cosa a tener en cuenta: estadísticas de tabla. ejecute UPDATE STATISTICS <TABLENAME>' after
TRUNCATE /
DELETE` para que el optimizador de consultas no se vea afectado por estadísticas antiguas.
TRUNCATE TABLE
lugar deDELETE FROM
.