¿Diferencia entre la tabla desplegable y la tabla truncada?

80

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.

Brian G
fuente
2
puede obtener respuesta de stackoverflow.com/questions/2012974/…
php
Si trunca la tabla, MySQL no libera el espacio del disco duro. Si desea recuperar su almacenamiento, debe soltar la tabla sin truncarlo.
Emilio Nicolás

Respuestas:

102

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.

JoshL
fuente
4
Además, truncar una tabla restablece la semilla de identidad. Esto puede ser útil en las pruebas porque puede truncar su tabla e insertar datos y saber cuáles serán los valores de identidad cada vez. Puede hacerlo si acaba de eliminar todos los datos de la tabla.
Jim
El mito de que DROP y TRUNCATE TABLE no están registrados . Solo dos centavos adicionales.
John KN
87

DROP TABLE elimina la tabla.

TRUNCATE TABLE lo vacía, pero deja su estructura para datos futuros.

ceejayoz
fuente
4
Hombre, hay mucho más que esto, sabes;)
David Aldridge
21
Ésta es la diferencia clave.
ceejayoz
26

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.

daremon
fuente
20

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.

Horrocrux7
fuente
4
set the row count zeroen realidad, establece el valor de identidad de nuevo en el valor de semilla de identidad inicial.
Filip De Vos
11

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)

Nathan Feger
fuente
2
Esto no es completamente correcto, TRUNCATE se puede revertir en el sentido BEGIN TRANSACTION, TRUNCATE TABLE, ROLLBACK, pero no en el sentido de "restaurar registros de transacciones". Registra la desasignación de las páginas.
Mark Sowul
1
-1 DROPes básicamente un TRUNCATEseguido de la eliminación de los metadatos de la tabla de las tablas del sistema. Vea esta pregunta aquí
Martin Smith
5

Mesa plegable

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.

BORRAR Tabla

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.

Mesa TRUNCATE

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.

Optimizador
fuente
Esto no es correcto. Truncar y soltar se pueden revertir. CREAR TABLA dbo.TestTruncate (ID INT) INSERT INTO dbo.TestTruncate (ID) VALUES (1) INSERT INTO dbo.TestTruncate (ID) VALUES (2) INSERT INTO dbo.TestTruncate (ID) VALUES (3) BEGIN TRAN TRUNCATE TABLE dbo .TestTruncate DROP TABLE dbo.TestTruncate ROLLBACK SELECT * FROM dbo.TestTruncate DROP TABLE dbo.TestTruncate
InbetweenWeekends
4

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.

Kevin Fairchild
fuente
3

Drop elimina la tabla por completo, eliminando también la definición. Truncar vacía la tabla pero no elimina la definición.

DMKing
fuente
3

Truncar la mesa vacía la mesa. Dejar caer la mesa la elimina por completo. Cualquiera de los dos será rápido, pero eliminarlo probablemente sea más rápido (dependiendo de su motor de base de datos).

Si ya no lo necesita, suéltelo para que no abarrote su esquema.

Dan Udey
fuente
3

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.

Raja
fuente
"La eliminación de cada fila se registra y se elimina físicamente" . ¿Estás seguro de que es correcto? El blog de MSDN dice que no se eliminan de inmediato. Así es como funciona Postgres también.
Brad Koch
2

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.

mmaibaum
fuente
Es más rápido truncar porque no registra la transacción (creo), por lo que no puede retroceder desde un truncado como lo haría desde una eliminación.
Steven Murawski
2

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

Jeff
fuente
2

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

Ricardo C
fuente
2

En el estándar SQL, la tabla DROP elimina la tabla y el esquema de la tabla; TRUNCATE elimina todas las filas.

colgando
fuente
1

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.

Dan Coates
fuente
1

BORRAR VS TRUNCATE

  1. La DELETEdeclaración elimina las filas de una en una y registra una entrada en el registro de transacciones para cada fila eliminada.TRUNCATE TABLEelimina 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 transacciones
  2. Podemos usar la WHEREcláusula en DELETEpero TRUNCATEusted no puede usarla
  3. Cuando la DELETEinstrucción se ejecuta usando un bloqueo de fila, cada fila de la tabla se bloquea para su eliminación. TRUNCATE TABLEsiempre bloquea la tabla y la página, pero no cada fila
  4. Después de DELETEque 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
    páginas se desasignarán rápidamente mediante un proceso de limpieza en segundo plano.
  5. TRUNCATE TABLE elimina todas las filas de una tabla, pero la estructura de la tabla y sus columnas, restricciones, índices, etc. permanecen
  6. DELETEla declaración no es la RESEEDcolumna de identidad sino la TRUNCATEdeclaración de RESEEDSla IDENTITYcolumna
  7. No puede usar TRUNCATE TABLEen tablas que:
    1. Están referenciados por una FOREIGN KEYrestricción. (Puede truncar una tabla que tiene una clave externa que hace referencia a sí misma).
    2. Participa en una vista indexada.
    3. Se publican mediante replicación transaccional o replicación de combinación.
  8. TRUNCATE TABLE no se puede activar un disparador porque la operación no registra eliminaciones de filas individuales
Sasikiran
fuente
1

Drop drop tabla completa y toda su estructura

truncar eliminar todas las filas de la tabla es diferente de eliminar que también elimina índices de filas

ZIA
fuente
1

Eliminar 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

  • Eliminar declaración es más lento que Truncar declaración porque eliminó registros uno por uno

Declaración truncada

Truncar sentencia Elimina o elimina todas las filas de la tabla.

  • Es más rápido que la declaración de eliminación porque eliminó todos los registros de la tabla
  • Truncar la declaración no devuelve el número de filas se eliminan 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

Zubair Saif
fuente
0

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

Comunidad
fuente