sql >> Databáze >  >> RDS >> Mysql

MySQL:Proč je DELETE náročnější na CPU než INSERT?

Alespoň s InnoDB (a doufám, že vás na to mají), máte více operací i bez cizích klíčů . Vložka je zhruba tato:

  1. Vložit řádek
  2. Označte do vyrovnávací paměti binárního protokolu
  3. Označit potvrzení

Odstranění provádějte takto:

  1. Označit řádek odstraněný (při použití stejného požadavku jako vložení – stránka se přepíše)
  2. Označte do vyrovnávací paměti binárního protokolu
  3. Označit jako potvrzené
  4. Ve skutečnosti jděte a odstraňte řádek (přičemž stejný přístup jako vložení – stránka se přepíše)
  5. Vyčistit vlákno sleduje smazané stopy také ve vyrovnávací paměti binárního protokolu.

Za to máte dvakrát tolik práce s mazáním než s vkládáním. Odstranění vyžaduje tyto dva zápisy, protože musí být označeno jako odstraněné pro všechny budoucí verze, ale lze jej odstranit pouze tehdy, když nezůstanou žádné transakce, které jej vidí. Vzhledem k tomu, že InnoDB zapisuje na disk pouze celé bloky, je postih za modifikaci za blok konstantní.



  1. seriál v postgresu se zvyšuje, i když jsem přidal na konfliktu nedělat nic

  2. Jak funguje Log() v PostgreSQL

  3. Java PreparedStatement načítá poslední vložené ID

  4. Vyberte data prostřednictvím funkce s hodnotou tabulky na serveru SQL Server