Monday, June 20, 2011

Truncate Vs delete

Anoche mientras estaba estudiando algo de programación y base de datos vi algo que no estoy acostumbrada a ver: "Truncate table my_table" y me dije... ¿truncate? ¿cuál es la diferencia entre esto y el Delete from my_table?

No me quedé con las dudas y ahora lo sé todo =) jejeje. Aquí les va algo que encontré en la web.

Truncate

Este comando remueve todas las filas de una tabla sin registrar las eliminaciones individuales en el log de transacciones. Prácticamente hace lo mismo que DELETE sin modificar o borrar la estructura de la tabla, sin embargo no se puede utilizar la clausula WHERE. TRUNCATE no permite filtrar por filas, elimina todos los registros de una tabla.

Delete

DELETE también remueve las filas de una tabla, pero registra las eliminaciones individuales en el log de transacciones. Podemos utilizar la clausula WHERE para filtrar las filas que necesitemos eliminar.

Diferencias y Semejanzas

1. TRUNCATE es un comando DDL (Lenguaje de definición de datos) mientras que DELETE es un DML (lenguajde de manipulación de datos)

2. Tanto TRUNCATE como DELETE eliminan los datos, no la estructura.

3. Solo DELETE permite la eliminación condicional de los registros.

4. TRUNCATE es mucho más rápdo que DELETE. (Esto es por el hecho de que TRUNCATE remueve los datos directamente sin hacer una copia dentro del Rollback Tablespace tal como lo hace el DELETE)

5. No se puede hacer un Rollback en TRUNCATE pero en Delete se puede.

6. TRUNCATE resetea el High Water Mark para la tabla y dealoca el espacio mientras que el DELETE no lo hace.

7. TRUNCATE no dispara Triggers asociados a la tabla.

8. DELETE es una operación registrada en el log de transacciones, basada en registrar cada eliminación individual.

9. Solo TRUNCATE reinicia el contador para una tabla que contenga una columna IDENTITY.

10. DELETE de tablas grandes genera una importante cantidad de UNDO y REDO.

11. TRUNCATE invalida cualquier cursor referenciado a la tabla.

Entre otras...

Mi sugerencia es que si tenés que eliminar todos los registros de una tabla for ever y no volver a saber never ever de ellos, deberías usar el TRUNCATE.

No comments:

Post a Comment