¿Cuáles son las diferencias entre eliminar, truncar y soltar, y cómo elegir? Bien puede entrar y echar un vistazo

Primero mira una historia:

  1. Mi colega me preguntó la semana pasada: "Mira, encontré que MySQL tiene un error. Para limpiar el disco por la tarde, obviamente borré 1 millón de datos de MySQL. No solo el disco no se hizo más pequeño, sino que se llenó más".

  2. ¿Cómo lo borraste?

  3. "Eliminar de la tabla 呀"

  4. "No es de extrañar, en realidad hay varias formas de eliminar datos MySQL. DELETE no debería usarse en algunos escenarios, como tu situación. Bien, déjame contarte sobre esto".


¿Cuáles son las formas en que MySQL elimina datos?

Por lo general, usamos tres métodos de eliminación: eliminar mediante las palabras clave eliminar, truncar y soltar; estos tres se pueden usar para eliminar datos, pero los escenarios son diferentes.


1. En términos de velocidad de ejecución

soltar> truncar >> BORRAR

2. En principio

1.Eliminar

DELETE from TABLE_NAME where xxx
  1. delete pertenece al lenguaje operativo de la base de datos DML. Solo borra datos pero no borra la estructura de la tabla. Pasará por transacciones y disparará un disparador cuando se ejecute;
  2. En InnoDB, eliminar no elimina realmente los datos. MySQL en realidad solo marca los datos eliminados como eliminados. Por lo tanto, cuando eliminar elimina los datos de la tabla, el espacio ocupado por el archivo de la tabla en el disco no será Si se vuelve más pequeño, el espacio de almacenamiento no se liberará, pero la fila de datos eliminados se establece como invisible. Aunque no se libera espacio en el disco, aún puede reutilizar este espacio cuando inserte datos la próxima vez ( reutilizar → sobrescribir ).
  3. Cuando se ejecuta la eliminación, los datos eliminados se almacenarán en caché en el segmento de reversión primero, y entrará en vigencia después de la confirmación de la transacción;
  4. delete from table_name elimina todos los datos de la tabla. Para MyISAM, el espacio en disco se liberará inmediatamente e InnoDB no liberará espacio en disco;
  5. Para eliminar de table_name donde xxx elimina condicionalmente, ni InnoDB ni MyISAM liberarán espacio en disco;
  6. Use optimizar tabla table_name después de que la operación de eliminación liberará espacio en disco inmediatamente. Ya sea InnoDB o MyISAM. Por lo tanto, para lograr el propósito de liberar espacio en disco, ejecute optimizar la operación de tabla después de eliminar.

Ejemplo: La declaración SQL para verificar el espacio en disco ocupado por la tabla es la siguiente: (use M como unidad de visualización, nombre de la base de datos: csjdemo, nombre de la tabla: demo2)

select concat(round(sum(DATA_LENGTH/1024/1024),2),'M') as table_size 
   from information_schema.tables 
      where table_schema='csjdemo' AND table_name='demo2';
      

1
Luego ejecute la declaración de optimización de espacio y el tamaño de la tabla cambiará después de la ejecución:

optimize table demo2

Inserte la descripción de la imagen aquí
Mirando el tamaño de esta tabla nuevamente, solo queda el tamaño de la estructura de la tabla.
Inserte la descripción de la imagen aquí

  1. La operación elete ejecuta la eliminación línea por línea y registra el registro de la operación de eliminación de la línea en los espacios de tabla de rehacer y deshacer para las operaciones de reversión y rehacer. Una gran cantidad de registros generados también ocuparán espacio en el disco.

2.truncar

Truncate table TABLE_NAME
  1. truncar: pertenece al lenguaje de definición DDL de la base de datos, no acepta transacciones, los datos originales no se colocan en el segmento de reversión y la operación no activa el disparador.
    Se aplica inmediatamente después de la ejecución, no se puede recuperar Se aplica
    inmediatamente después de la ejecución, no se puede recuperar Se aplica
    inmediatamente después de la ejecución, no se pueden recuperar
    cosas importantes
  2. truncate table table_name libera inmediatamente espacio en disco, ya sea InnoDB o MyISAM. Truncar tabla es en realidad un poco similar a soltar tabla y luego crear, pero el proceso de creación de tabla está optimizado, por ejemplo, el archivo de estructura de tabla ya existe antes. Por tanto, la velocidad debe estar cerca de la velocidad de la mesa de caída;
  3. truncar puede vaciar rápidamente una mesa. Y restablezca el valor de auto_increment.

Pero las cosas que deben tenerse en cuenta para los diferentes tipos de motores de almacenamiento son:

  • Para MyISAM, truncar restablece el valor de auto_increment (secuencia de autoincremento) a 1. Después de eliminar, la tabla aún mantiene auto_increment.
  • Para InnoDB, truncar restablecerá el valor de auto_increment a 1. La tabla permanece auto_increment después de eliminar. Pero si reinicia MySQL después de eliminar toda la tabla, auto_increment se establecerá en 1.

En otras palabras, la tabla de InnoDB en sí no puede persistir auto_increment. Después de eliminar la tabla, auto_increment aún se almacena en la memoria, pero se pierde después de reiniciar y solo puede comenzar desde 1. De hecho, auto_increment después del reinicio comenzará desde SELECT 1 + MAX (ai_col) FROM t.

  1. Use truncar con cuidado, especialmente cuando no hay respaldo, si elimina la tabla en línea por error, recuerde contactar a Civil Aviation of China a tiempo, el teléfono de reserva de boletos: 400-806-9553 (listo para ejecutar) El
    código es el siguiente (ejemplo):

3 gota

Drop table Tablename
  1. drop: pertenece al lenguaje de definición DDL de la base de datos, al igual que Truncate;
    entra en vigor
    inmediatamente
    después de la ejecución y no se puede recuperar. Tiene efecto inmediatamente después de la ejecución y no se puede recuperar. Tiene efecto inmediatamente después de la ejecución y no se puede recuperar.
  2. drop table table_name libera inmediatamente espacio en disco, ya sea InnoDB o MyISAM; la sentencia drop eliminará las restricciones, desencadenadores e índices de los que depende la estructura de la tabla; los procedimientos / funciones almacenados que dependen de la tabla Reservado, pero no válido.
  3. Use drop con cuidado. Si desea eliminar al hermano que se escapa del reloj, realice la operación después de que el boleto se haya reservado correctamente. Tel de reservas: 400-806-9553

para resumir

Se puede entender así: para
un libro, eliminar es romper el catálogo, truncar es arrancar el contenido del libro y quemarlo, y soltar es quemar el libro ~
Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/MiaoWei_/article/details/109301342
Recomendado
Clasificación