Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQL:Por que DELETE é mais intensivo em CPU do que INSERT?


Pelo menos com o InnoDB (e espero que eles tenham você nisso), você tem mais operações mesmo sem chaves estrangeiras . Uma inserção é mais ou menos isso:
  1. Inserir linha
  2. Marcar no buffer de log binário
  3. Marcar confirmação

As exclusões fazem o seguinte:
  1. Marcar linha removida (recebendo o mesmo resultado de uma inserção -- a página é reescrita)
  2. Marcar no buffer de log binário
  3. Marca confirmada
  4. Na verdade, remova a linha (recebendo o mesmo resultado de uma inserção -- a página é reescrita)
  5. Apagar threads também rastreia exclusões no buffer de log binário.

Para isso, você tem o dobro do trabalho para excluir em vez de inserir. Uma exclusão requer essas duas gravações porque deve ser marcada como removida para todas as versões futuras, mas só pode ser removida quando não restar nenhuma transação que a veja. Como o InnoDB grava apenas blocos completos no disco, a penalidade de modificação para um bloco é constante.