Qué es más rápido: TRUNCATE de una tabla, o ELIMINAR una gran tabla en MySQL?

Posted by in Bases de datos, MariaDB, MySQL

Dentro de un proyecto que tengo con al Universidad, necesito rehacer una tabla y me planteo usar el método más rápido de las dos posibilidades que hay: hacer un TRUNCATE, o bien eliminar la tabla completamente y volverla a crear.

TRUNCATE es la opción de vaciar una tabla reiniciando también el valor de autonumérico a generar, volviendo a uno. Eliminar una tabla es hacer DROP TABLE, con lo que directamente te cargas la tablas, y que requerirá un CREATE TABLE para restablecer la estructura.

Para valorar de las dos opciones es más rápida, vamos a utilizar PROFILE, para ver la velocidad a la que se ejecutan las consultas (esto ya lo vimos en Manejando Datos).

Tamaño de las tablas

Aquí muestro las dos bases de datos que van a formar parte de este pequeño experimento, y las tablas a eliminar son “datos“.

Bases de datos

Bases de datos

Cómo tienen distinto número de filas, una tiene 35.416.094 y otra 22.654.432, ocupando sobre  5,7 Gb y 3.5 Gb:

datos de i6

datos de i6

datos de i7

datos de i7

Empezamos con TRUNCATE

Vamos a plantear como primera opción TRUNCATE:

truncate

truncate

La eliminación de filas ha sido rapidísima, pues es capaz de eliminar 23 millones de registros por minuto!!

Seguimos con DROP TABLE

La otra alternativa es DROP TABLE:

drop table

drop table

Tampoco está mal, pues 22 millones de registros han sido eliminados en menos de 1 segundo.

Y cuánto hubiera tardado DELETE FROM datos?

Cómo me he “cargado” dos bases de datos, vamos con una tercera que tengo también preparada. En este caso, son 45.292.476 registros:

datos_i4

datos_i4

Ejecutamos el DELETE FROM datos y ….

delete from

delete from

La cosa se eterniza! La captura se hizo cuando llevaba 126 segundos procesando, y … quedaba bastante aun!

Así que, lo más efectivo es …. TRUNCATE

En mi opinion, lo más efectivo es TRUNCATE por el simple hecho de que la estructura la deja limpia, mientras que con DROP tienes que ejecutar una segunda instrucción SQL para CREATE TABLE.

Espero que os sirva, y happy coding!

Google+ Comments - Comentarios Google+