sql >> Base de Datos >  >> RDS >> Mysql

MySQL:¿Por qué DELETE consume más CPU que INSERT?

Al menos con InnoDB (y espero que te tengan en esto), tienes más operaciones incluso sin claves foráneas . Un inserto es más o menos esto:

  1. Insertar fila
  2. Marcar en el búfer de registro binario
  3. Marcar confirmación

Las eliminaciones hacen lo siguiente:

  1. Marcar fila eliminada (recibiendo el mismo resultado que una inserción; la página se reescribe)
  2. Marcar en el búfer de registro binario
  3. Marcar como comprometido
  4. En realidad, elimine la fila (recibiendo el mismo resultado que una inserción; la página se reescribe)
  5. El subproceso de purga también rastrea las eliminaciones en el búfer de registro binario.

Para eso, tiene el doble de trabajo para eliminar en lugar de insertar. Una eliminación requiere esas dos escrituras porque debe marcarse como eliminada para todas las versiones en el futuro, pero solo puede eliminarse cuando no quedan transacciones que la vean. Debido a que InnoDB solo escribe bloques completos en el disco, la penalización por modificación de un bloque es constante.