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

MySQL:Hvorfor er DELETE mere CPU-intensivt end INSERT?

I det mindste med InnoDB (og jeg håber, de har dig på dette), har du flere operationer selv uden fremmednøgler . Et indstik er nogenlunde dette:

  1. Indsæt række
  2. Markér i binær logbuffer
  3. Markér forpligtelse

Sletninger gør følgende:

  1. Markér række som fjernet (tager samme hit som en indsættelse -- siden omskrives)
  2. Markér i binær logbuffer
  3. Markér forpligtet
  4. Fjern faktisk rækken (ved at tage det samme hit som en indsættelse -- siden bliver omskrevet)
  5. Rens tråd sporer også sletninger i binær logbuffer.

For det har du det dobbelte arbejde i gang med at slette i stedet for at indsætte. En sletning kræver disse to skrivninger, fordi den skal markeres som fjernet for alle versioner fremover, men kan kun fjernes, når der ikke er nogen transaktioner tilbage, som kan se den. Fordi InnoDB kun skriver hele blokke til disken, er modifikationsstraffen for en blok konstant.



  1. Nodejs Cluster med MySQL-forbindelser

  2. Hvordan kan jeg matche en kommasepareret liste med en værdi?

  3. Erstatning for MySQL's UUID version 1-funktion?

  4. Autentificer som en specifik bruger i MySQL