sql >> Databasteknik >  >> RDS >> Mysql

MySQL:Varför är DELETE mer CPU-intensivt än INSERT?

Åtminstone med InnoDB (och jag hoppas att de har dig på det här), har du fler operationer även utan främmande nycklar . En insert är ungefär detta:

  1. Infoga rad
  2. Markera i binär loggbuffert
  3. Markera åtagande

Borttagningar gör följande:

  1. Markera rad borttagen (tar samma träff som en infogning -- sidan skrivs om)
  2. Markera i binär loggbuffert
  3. Markera som engagerad
  4. Ta faktiskt bort raden, (ta samma träff som en infogning -- sidan skrivs om)
  5. Rensa tråd spårar borttagningar i binär loggbuffert också.

För det har du dubbelt så mycket arbete att ta bort istället för att infoga. En radering kräver dessa två skrivningar eftersom den måste markeras som borttagen för alla versioner framöver, men kan bara tas bort när inga transaktioner kvarstår som ser den. Eftersom InnoDB bara skriver hela block, till disken, är modifieringsstraffet för ett block konstant.



  1. MySQL-uppdatering från en tabell till en annan med tillstånd som inte fungerar?

  2. Hur man väljer data från två tabeller med en enda fråga

  3. Hibernate Kryptering av databasen helt transparent för applikation

  4. Biblioteket har inte laddats:@rpath/libmysqlclient.21.dylib Orsak:bilden hittades inte Django migreringsfel med mysqlclient DB-drivrutinen och MySQL 8 med macOS