Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL:perché DELETE richiede più CPU di INSERT?

Almeno con InnoDB (e spero che ti abbiano su questo), hai più operazioni anche senza chiavi esterne . Un inserto è più o meno questo:

  1. Inserisci riga
  2. Segna nel buffer di log binario
  3. Segna come commit

Le eliminazioni procedono come segue:

  1. Riga del contrassegno rimossa (rispettando lo stesso risultato di un inserimento:la pagina viene riscritta)
  2. Segna nel buffer di log binario
  3. Segna come impegnato
  4. In realtà vai a rimuovere la riga, (prendendo lo stesso colpo di un inserimento -- la pagina viene riscritta)
  5. Anche il thread di eliminazione tiene traccia delle eliminazioni nel buffer di log binario.

Per questo, hai il doppio del lavoro da eliminare anziché inserire. Un'eliminazione richiede queste due scritture perché deve essere contrassegnata come rimossa per tutte le versioni successive, ma può essere rimossa solo quando non rimangono transazioni che la vedono. Poiché InnoDB scrive solo blocchi interi sul disco, la penalità di modifica per un blocco è costante.