El comando TRUNCATE, lo que hace es desasociar las páginas
de datos de la tabla, sin alterar los registros en sí mismo, mientras que el
DELETE recorre cada uno de los registros y los marca como borrados, por lo
tanto, hace muchas más operaciones de I/O, que aumenta exponencialmente en
relación con TRUNCATE, a medida que aumenta el tamaño de la tabla.
Cuando trabajamos con tablas que tienen millones de registros nos preguntamos si debemos utilizar DELETE o TRUNCATE, ¿cuál es más óptimo? referente al rendimiento de nuestro servidor, ¿es posible revertir la operación si comenzamos una transacción?, descubramos en el siguiente caso:
Caso práctico
En primer lugar crearemos una tabla e insertamos datos de prueba.
-- Creamos la tabla
CREATE TABLE Employee(
Empid
int NOT NULL,
Name nchar(10) NULL,
City
nchar(10) NULL
) ON [PRIMARY]
GO
-- Insertamos algunos datos
insert into Employee values (1,'Shweta','Pune') ,(2,'Stella','Hydrabad')
insert into Employee values (1,'Shweta','Pune') ,(2,'Stella','Hydrabad')

SQL Server DELETE con Rollback
Ahora tenemos una tabla con registros ficticios. Ahora hagamos un BORRAR dentro de una TRANSACCIÓN y veamos si podemos retroceder:
BEGIN TRANSACTION
DELETE from Employee where Empid='1'
GO
Eliminamos el registro donde el Empid es igual a 1 y ahora solo tenemos
un registro:
Intentemos revertir y ver si podemos recuperar el registro eliminado:
ROLLBACK TRANSACTION
Como puede ver a continuación, lo devolvemos el registro:

SQL Server TRUNCATE con Rollback
Probemos lo mismo
para TRUNCATE:
BEGIN TRANSACTION
TRUNCATE TABLE Employee
Ahora hemos truncado la tabla y no tenemos registros, la tabla está
vacía:

Intentemos retroceder y ver si podemos recuperar los
registros. Ejecute el siguiente comando y vea lo que obtiene:

ROLLBACK TRANSACTION
Como puede ver a continuación, recuperamos los registros.
Conclusión
- Por lo tanto, podemos deshacer DELETE también TRUNCATE si los comandos se inician dentro de una transacción y no hay diferencia entre DELETE y TRUNCATE si hablamos de rollback.
- En el performance del servidor el TRUNCATE es más óptimo porque solo se loguea en el transaction log, mientras que el DELETE manda a transacction log todos los registros afectados, lo que es obviamente mucho más costoso a nivel de recursos de I/O.
Referencia: @ldomar.mc
https://zeytol.com
https://zeytol.com
Comentarios
Publicar un comentario