Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL :Pourquoi DELETE consomme-t-il plus de CPU que INSERT ?

Au moins avec InnoDB (et j'espère qu'ils vous ont à ce sujet), vous avez plus d'opérations même sans clés étrangères . Un encart correspond à peu près à ceci :

  1. Insérer une ligne
  2. Marquer dans le tampon du journal binaire
  3. Marquer comme commit

Les suppressions effectuent les opérations suivantes :

  1. Marquer la ligne supprimée (prenant le même résultat qu'une insertion -- la page est réécrite)
  2. Marquer dans le tampon du journal binaire
  3. Marquer comme engagé
  4. En fait, supprimez la ligne (en prenant le même résultat qu'une insertion – la page est réécrite)
  5. Le fil de purge suit également les suppressions dans le tampon de journal binaire.

Pour cela, vous avez deux fois plus de travail à supprimer qu'à insérer. Une suppression nécessite ces deux écritures car elle doit être marquée comme supprimée pour toutes les versions à venir, mais ne peut être supprimée que lorsqu'il ne reste plus aucune transaction qui la voit. Étant donné qu'InnoDB n'écrit que des blocs complets sur le disque, la pénalité de modification pour un bloc est constante.