Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL:Warum ist DELETE CPU-intensiver als INSERT?

Zumindest mit InnoDB (und ich hoffe, sie haben Sie dabei) haben Sie auch ohne Fremdschlüssel mehr Operationen . Eine Einfügung ist ungefähr so:

  1. Zeile einfügen
  2. Im Binärlog-Puffer markieren
  3. Bestätigen markieren

Löschungen bewirken Folgendes:

  1. Zeile entfernt markieren (gleicher Treffer wie beim Einfügen – Seite wird neu geschrieben)
  2. Im Binärlog-Puffer markieren
  3. Bestätigt markieren
  4. Entfernen Sie tatsächlich die Zeile (nehmen Sie denselben Treffer wie eine Einfügung -- Seite wird neu geschrieben)
  5. Purge-Thread verfolgt auch Löschungen im Binärlog-Puffer.

Dafür haben Sie doppelt so viel Arbeit zu löschen statt einzufügen. Ein Löschvorgang erfordert diese beiden Schreibvorgänge, da er für alle zukünftigen Versionen als entfernt markiert werden muss, aber nur entfernt werden kann, wenn keine Transaktionen mehr vorhanden sind, die ihn sehen. Da InnoDB nur ganze Blöcke auf die Festplatte schreibt, ist die Änderungsstrafe für einen Block konstant.