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

Složené pořadí indexování InnoDB a výkon INSERT

(Poznámka:Tato odpověď objasňuje nebo nesouhlasí s některými již napsanými komentáři.)

DELETEs jsou zpomaleny kvůli smazání položek rejstříku. UPDATEs může být zpomalen -- záleží na tom, zda se změní indexovaný sloupec.

SELECTs , UPDATEs a DELETEs , ale ne INSERTs , potřeba najít řádek(y); k tomu může hodně pomoci index.

INSERT je zraněno navíc, pokud existuje UNIQUE index ke kontrole.

Sekundární klíče (v InnoDB), kromě pro UNIQUE klíče, jsou aktualizovány (obvykle kvůli INSERT a DELETEs , ale pravděpodobně kvůli UPDATE ) „zpožděným“ způsobem prostřednictvím toho, co se nazývá „Change Buffer“. To účinně odkládá aktualizaci indexu, ale stále udržuje index plně použitelný.

Na nic z toho nemá vliv pořadí sloupců v indexu. Pokud je však index větší, než lze uložit do mezipaměti v paměti RAM, do hry vstupuje „ukládání do mezipaměti“ a vstup/výstup může, ale nemusí být zapojen. Ale to je jiné téma.

Obecně přínos z indexu pro čtení daleko převažuje zpomalení operací zápisu.



  1. Co to znamená, když je proces PostgreSQL v transakci nečinný?

  2. Jak změnit vlastnictví některých tabulek v databázi z postgres na jiného uživatele?

  3. Tisknout výsledky SELECT dotazu jako předformátovaný text v PHP?

  4. Vymažte mezipaměť dotazů MySQL bez restartování serveru