Tengo algunas tablas que creo como parte de mi resumen de informes. No los necesito para nada después. Alguien mencionó truncarlos ya que sería más rápido.
Tengo algunas tablas que creo como parte de mi resumen de informes. No los necesito para nada después. Alguien mencionó truncarlos ya que sería más rápido.
Respuestas:
La eliminación de registros de una tabla registra cada eliminación y ejecuta los activadores de eliminación para los registros eliminados. Truncar es un comando más poderoso que vacía una tabla sin registrar cada fila. SQL Server le impide truncar una tabla con claves externas que hacen referencia a ella, debido a la necesidad de verificar las claves externas en cada fila.
Truncar es normalmente ultrarrápido, ideal para limpiar datos de una tabla temporal. Conserva la estructura de la mesa para uso futuro.
Si realmente desea eliminar las definiciones de la tabla , así como los datos, simplemente elimine las tablas.
Consulte este artículo de MSDN para obtener más información.
DROP TABLE elimina la tabla.
TRUNCATE TABLE lo vacía, pero deja su estructura para datos futuros.
DROP y TRUNC hacen cosas diferentes:
MESA TRUNCATE
Elimina todas las filas de una tabla sin registrar las eliminaciones de filas individuales. TRUNCATE TABLE es similar a la instrucción DELETE sin cláusula WHERE; sin embargo, TRUNCATE TABLE es más rápido y utiliza menos recursos del registro de transacciones y del sistema.
MESA PLEGABLE
Elimina una o más definiciones de tabla y todos los datos, índices, activadores, restricciones y especificaciones de permisos para esas tablas.
En cuanto a la velocidad, la diferencia debería ser pequeña. Y de todos modos, si no necesita la estructura de la tabla, use DROP.
Creo que significa la diferencia entre DELETE TABLE y TRUNCATE TABLE.
MESA PLEGABLE
eliminar la tabla de la base de datos.
BORRAR TABLA
sin una condición, elimine todas las filas. Si hay disparadores y referencias, esto se procesará para cada fila. También se modificará un índice si lo hay.
MESA TRUNCATE
establecer el recuento de filas en cero y sin registrar cada fila. Que es mucho más rápido que el otro tanto.
set the row count zero
en realidad, establece el valor de identidad de nuevo en el valor de semilla de identidad inicial.
Ninguna de estas respuestas señala una diferencia importante sobre estas dos operaciones. Drop table es una operación que se puede revertir. Sin embargo, truncar no se puede revertir ['TRUNCATE TABLE' también se puede revertir]. De esta forma, dejar caer una tabla muy grande puede resultar muy costoso si hay muchas filas, porque todas deben registrarse en un espacio temporal en caso de que decida revertirla.
Por lo general, si quiero deshacerme de una tabla grande, la truncaré y luego la soltaré. De esta manera, los datos se eliminarán sin registro, y la tabla se puede eliminar, y esa eliminación será muy económica porque no es necesario registrar datos.
Sin embargo, es importante señalar que truncar solo elimina datos, dejando la tabla, mientras que drop eliminará, de hecho, los datos y la tabla en sí. (asumiendo que las claves externas no excluyen tal acción)
DROP
es básicamente un TRUNCATE
seguido de la eliminación de los metadatos de la tabla de las tablas del sistema. Vea esta pregunta aquí
DROP TABLE [table_name];
El comando DROP se utiliza para eliminar una tabla de la base de datos. Es un comando DDL. También se eliminarán todas las filas, índices y privilegios de la tabla. La operación DROP no se puede revertir.
DELETE FROM [table_name]
WHERE [condition];
DELETE FROM [table_name];
El comando DELETE es un comando DML. Se puede usar para eliminar todas las filas o algunas filas de la tabla según la condición especificada en la cláusula WHERE. Se ejecuta utilizando un bloqueo de fila, cada fila de la tabla está bloqueada para su eliminación. Mantiene el registro de transacciones, por lo que es más lento que TRUNCATE. Las operaciones DELETE se pueden revertir.
TRUNCATE TABLE [table_name];
El comando TRUNCATE elimina todas las filas de una tabla. No registrará la eliminación de cada fila, sino que registrará la desasignación de las páginas de datos de la tabla, lo que lo hace más rápido que DELETE. Se ejecuta mediante un bloqueo de tabla y toda la tabla se bloquea para eliminar todos los registros. Es un comando DDL. Las operaciones TRUNCATE no se pueden revertir.
TRUNCATE TABLE mantiene toda su indexación anterior y todo eso. DROP TABLE, obviamente, eliminaría la tabla y requeriría que la recrearas más tarde.
BORRAR TableA en lugar de TRUNCATE TableA? Un error común es que hacen lo mismo. No tan. De hecho, existen muchas diferencias entre los dos.
ELIMINAR es una operación registrada por fila. Esto significa que la eliminación de cada fila se registra y se elimina físicamente.
Puede BORRAR cualquier fila que no viole una restricción, mientras deja la clave externa o cualquier otra restricción en su lugar.
TRUNCATE también es una operación registrada, pero de una manera diferente. TRUNCATE registra la desasignación de las páginas de datos en las que existen los datos. La desasignación de páginas de datos significa que sus filas de datos todavía existen en las páginas de datos, pero las extensiones se han marcado como vacías para su reutilización. Esto es lo que hace que TRUNCATE sea una operación más rápida de realizar sobre DELETE.
No puede TRUNCATE una tabla que tiene restricciones de clave externa. Tendrá que quitar las restricciones, TRUNCAR la mesa y volver a aplicar las restricciones.
TRUNCATE restablecerá cualquier columna de identidad al valor inicial predeterminado.
truncar elimina todas las filas, pero no la tabla en sí, es esencialmente equivalente a eliminar sin cláusula where, pero generalmente más rápido.
Tengo una corrección para una de las declaraciones anteriores ... "truncar no se puede deshacer"
Truncar se puede revertir. Hay algunos casos en los que no puede truncar o eliminar la tabla, como cuando tiene una referencia de clave externa. Para una tarea como la presentación de informes mensuales, probablemente dejaría caer la mesa una vez que ya no la necesite. Si estuviera haciendo este informe acumulativo con más frecuencia, probablemente conservaría la tabla y usaría truncar.
Espero que esto ayude, aquí hay más información que debería encontrar útil ...
Consulte el siguiente artículo para obtener más detalles: http://sqlblog.com/blogs/denis_gobo/archive/2007/06/13/1458.aspx
Además, para obtener más detalles sobre eliminar o truncar, consulte este artículo: http://www.sql-server-performance.com/faq/delete_truncate_difference_p1.aspx
¡Gracias! Jeff
TRUNCATE TABLE es funcionalmente idéntico a la declaración DELETE sin cláusula WHERE: ambos eliminan todas las filas de la tabla. Pero TRUNCATE TABLE es más rápido y utiliza menos recursos del registro de transacciones y del sistema que DELETE.
La instrucción DELETE elimina las filas de una en una y registra una entrada en el registro de transacciones para cada fila eliminada. TRUNCATE TABLE elimina los datos al desasignar las páginas de datos utilizadas para almacenar los datos de la tabla, y solo las desasignaciones de páginas se registran en el registro de transacciones.
TRUNCATE TABLE elimina todas las filas de una tabla, pero la estructura de la tabla y sus columnas, restricciones, índices, etc. permanecen. El contador utilizado por una identidad para nuevas filas se restablece a la semilla de la columna. Si desea retener el contador de identidad, use DELETE en su lugar. Si desea eliminar la definición de la tabla y sus datos, use la instrucción DROP TABLE.
No puede utilizar TRUNCATE TABLE en una tabla a la que hace referencia una restricción FOREIGN KEY; en su lugar, use la instrucción DELETE sin una cláusula WHERE. Debido a que TRUNCATE TABLE no está registrado, no puede activar un disparador.
TRUNCATE TABLE no se puede utilizar en tablas que participan en una vista indexada.
De http://msdn.microsoft.com/en-us/library/aa260621(SQL.80).aspx
Las respuestas aquí coinciden con la pregunta, pero voy a responder la pregunta que no hiciste. "¿Debo utilizar truncar o eliminar?" Si está eliminando todas las filas de una tabla, normalmente querrá truncar, ya que es mucho más rápido. ¿Por qué es mucho más rápido? Al menos en el caso de Oracle, restablece la marca de agua alta . Esto es básicamente una desreferenciación de los datos y permite que la base de datos los reutilice para otra cosa.
DELETE
declaración elimina las filas de una en una y registra una entrada en el registro de transacciones para cada fila eliminada.TRUNCATE TABLE
elimina los datos al desasignar las páginas de datos utilizadas para almacenar los datos de la tabla y registra solo las desasignaciones de páginas en el registro de transaccionesWHERE
cláusula en DELETE
pero TRUNCATE
usted no puede usarlaDELETE
instrucción se ejecuta usando 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 filaDELETE
que se ejecuta una instrucción, la tabla aún puede contener páginas vacías. Si la operación de eliminación no usa 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 atrás, aunque estas TRUNCATE TABLE
elimina todas las filas de una tabla, pero la estructura de la tabla y sus columnas, restricciones, índices, etc. permanecenDELETE
la declaración no es la RESEED
columna de identidad sino la TRUNCATE
declaración de RESEEDS
la
IDENTITY
columnaTRUNCATE TABLE
en tablas que:
FOREIGN KEY
restricción. (Puede truncar una tabla que tiene una clave externa que hace referencia a sí misma).TRUNCATE TABLE
no se puede activar un disparador porque la operación no registra eliminaciones de filas individualesEliminar declaración
Declaración de eliminación eliminar filas de la tabla y devolver el número de filas se elimina de la tabla. En esta declaración, usamos la cláusula where para eliminar datos de la tabla
Declaración truncada
Truncar sentencia Elimina o elimina todas las filas de la tabla.
Declaración de caída
La declaración de caída eliminó todos los registros, así como la estructura de la tabla
ELIMINAR
El comando DELETE se usa para eliminar filas de una tabla. Se puede usar una cláusula WHERE para eliminar solo algunas filas. Si no se especifica ninguna condición WHERE, se eliminarán todas las filas. Después de realizar una operación ELIMINAR, debe COMPROMETER o RETROCEDER la transacción para que el cambio sea permanente o deshacerlo.
TRUNCAR
TRUNCATE elimina todas las filas de una tabla. La operación no se puede revertir ... Como tal, TRUCATE es más rápido y no usa tanto espacio para deshacer como DELETE.
De: http://www.orafaq.com/faq/difference_between_truncate_delete_and_drop_commands