(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 TRUNCATEy DELETE:
- Uso de espacio de registro:
TRUNCATEsolo registra páginas / extensiones * liberadas, mientras que DELETEregistra filas individuales.
- Uso de bloqueo:
TRUNCATEgeneralmente usará menos bloqueos, ya que requiere un bloqueo de tabla y bloqueos de página, en lugar de DELETEusar bloqueos de fila **.
IDENTITYsecuencias: TRUNCATErestablece la secuencia de identidad en una tabla, si está presente.
(* Una extensión = 8 páginas. TRUNCATERegistrará / 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 TABLEpotencialmente 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 TABLEes definitivamente mejor que DELETE FROM TABLEsi está vaciando la tabla pero quiere mantener la estructura (NB: TRUNCATEno 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>' afterTRUNCATE /DELETE` para que el optimizador de consultas no se vea afectado por estadísticas antiguas.
TRUNCATE TABLElugar deDELETE FROM.