Eliminar todas las filas mediante TRUNCATE TABLE

La instrucción TRUNCATE TABLE es un método rápido y no registrado para eliminar todas las filas de una tabla. TRUNCATE TABLE es funcionalmente equivalente a la instrucción DELETE sin una cláusula WHERE. Sin embargo, TRUNCATE TABLE es más rápida y utiliza menos recursos de registro de sistema y de transacciones.

En comparación con la instrucción DELETE, TRUNCATE TABLE ofrece las siguientes ventajas:

  • Utiliza menos espacio de registro de transacciones.
    La instrucción DELETE quita una a una las filas y graba una entrada en el registro de transacciones por cada fila eliminada. TRUNCATE TABLE quita los datos al cancelar la asignación de las páginas de datos utilizadas para almacenar los datos de la tabla y sólo registra la página de asignaciones anuladas en el registro de transacciones.
  • Suele utilizar menos bloqueos.
    Cuando la instrucción DELETE se ejecuta mediante un bloqueo de fila, cada fila de la tabla se bloquea para su eliminación. TRUNCATE TABLE siempre bloquea la tabla y la página pero no cada fila.
  • Sin excepción, las páginas vacías permanecen en la tabla.
    Después de ejecutar una instrucción DELETE, la tabla todavía puede contener páginas vacías. Por ejemplo, las páginas vacías de un montón no se pueden desasignar sin por lo menos un bloqueo de tabla exclusivo (LCK_M_X). Si la operación de eliminación no utiliza un bloqueo de tabla, la tabla (montón) contendrá muchas páginas vacías. Para los índices, la operación de eliminación puede dejar páginas vacías, aunque éstas se desasignarán rápidamente por medio de un proceso de limpieza en segundo plano.

Como en el caso de DELETE, la definición de una tabla vaciada con TRUNCATE TABLE permanece en la base de datos, junto con sus índices y sus objetos asociados.

Truncar tablas grandes

Microsoft SQL Server 2005 ofrece la posibilidad de eliminar o truncar las tablas de más de 128 extensiones sin retener los bloqueos simultáneos en todas las extensiones requeridas para la eliminación. Para obtener más información, vea Quitar y volver a generar objetos grandes.

Ejemplos

En el siguiente ejemplo se quitan todos los datos de la tabla JobCandidate. Las instrucciones SELECT se incluyen antes que la instrucción TRUNCATE TABLE para comparar los resultados.

USE AdventureWorks;
GO
SELECT COUNT(*) AS BeforeTruncateCount 
FROM HumanResources.JobCandidate;
GO
TRUNCATE TABLE HumanResources.JobCandidate;
GO
SELECT COUNT(*) AS AfterTruncateCount 
FROM HumanResources.JobCandidate;
GO

Vea también

Conceptos

Eliminar filas mediante DELETE
Eliminar filas de conjuntos de resultados
Limitar el número de filas eliminadas mediante TOP

Otros recursos

DROP TABLE (Transact-SQL)
TRUNCATE TABLE (Transact-SQL)

Ayuda e información

Obtener ayuda sobre SQL Server 2005