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

Servidor SQL:ELIMINAR vs TRUNCAR

T-SQL proporciona dos palabras clave que le permiten eliminar datos de una tabla. Son ELIMINAR y TRUNCADO . Estos son similares en lo que están haciendo, sin embargo, utilizan métodos muy diferentes. En este artículo, analizamos los mecanismos subyacentes de estas palabras clave.

Una diferencia entre TRUNCATE y DELETE

TRUNCADO:

  1. TRUNCATE es un comando DDL.
  2. TRUNCATE TABLE siempre bloquea la tabla y la página. Sin embargo, no bloquea cada fila.
  3. No se puede usar la condición WHERE.
  4. El comando elimina todos los datos.
  5. TRUNCATE TABLE no puede activar un activador porque la operación no registra eliminaciones de filas individuales.
  6. Más rápido en rendimiento, porque no guarda registros.
  7. La reversión es posible.

ELIMINAR:

  1. DELETE es un comando DML.
  2. La instrucción DELETE utiliza un bloqueo de fila durante la ejecución. Cada fila de la tabla está bloqueada para su eliminación.
  3. Puede especificar filtros en la cláusula WHERE.
  4. El comando elimina los datos especificados si existe la condición WHERE.
  5. DELETE activa un activador porque las operaciones se registran individualmente.
  6. DELETE es más lento que TRUNCATE porque mantiene registros.
  7. La reversión es posible.

¿Cómo eliminar datos con la ayuda de TRUNCATE?

El siguiente ejemplo elimina todos los datos de la tabla Person. SELECCIONAR las declaraciones se incluyen antes y después de la TABLA TRUNCADA declaración para comparar resultados.

USE AdventureWorks2012;
GO
SELECT COUNT(*) AS BeforeTruncateCount
FROM Person.Person;
GO
TRUNCATE TABLE Person.Person;
GO
SELECT COUNT(*) AS AfterTruncateCount
FROM Person.Person;
GO

Destaquemos algunas ventajas.

La TABLA TRUNCADA El comando elimina todas las filas de una tabla desasignando las páginas de datos utilizadas para almacenar los datos de la tabla. Una vez completada la operación, la tabla contiene cero páginas. No registra las eliminaciones de filas individuales. El comando registra la desasignación de páginas en el registro de transacciones. El TRUNCADO El comando usa menos espacio de registro. Por lo general, se utilizan menos bloqueos. El comando elimina todas las filas de una tabla, pero se mantienen la estructura de la tabla y sus columnas, restricciones, índices, etc. Para quitar la mesa. necesitas usar DROP TABLE .

Si una tabla contiene una columna de identidad, el contador de esa columna se restablece al valor inicial definido para la columna. Si no se definió ninguna semilla, se utiliza el valor predeterminado 1. Para conservar el contador de identidad, utilice ELIMINAR en su lugar.

Eliminar todas las filas usando DELETE

El siguiente ejemplo elimina todas las filas de la tabla Person:

DELETE FROM Person.Person;
GO

ELIMINAR elimina las filas de una en una. El comando agrega el nuevo registro al registro de transacciones para cada fila eliminada. ELIMINAR utiliza un bloqueo de fila durante la ejecución, lo que significa que cada fila de la tabla está bloqueada para su eliminación. Una vez ELIMINAR se ejecuta, una tabla aún puede contener páginas de datos vacías. Por ejemplo, las páginas vacías en el montón no se pueden desasignar sin al menos un bloqueo de tabla exclusivo (LCK_M_X). ELIMINAR y TRUNCADO ambos se pueden revertir cuando se usan con TRANSACCIÓN .

Leer también

Diferencia entre la tabla DELETE y TRUNCATE en SQL Server