- Je pridávanie index na rýchlo sa meniace stĺpci ako "lastUpdatedOn" stojí za to ?
- Ako vypočítať kompromis ?
- Môže niekto miesto mňa na úradných dokladov na kedy a ako robí MySQL reindexes na riadok vloží a aktualizácie na indexovaný stĺpec.
Či je index, vrátane "rýchlo sa meniace stĺpci" je to kompromis.
E UPDATE
musí odstrániť jeden záznam v indexe a pridať nový záznam inde v indexe.
Na druhej strane, index môže výrazne urýchliť vzhľadom na index.
Uveďte konkrétny príklad, aby sme mohli diskutovať o kompromisy ďalej.
Pravidelné non-UNIQUE
indexy (ako protiklad k FULLTEXT
a SPATIAL
) sú udržiavané tak:
Tam je "zmena rezervy" (qv) v buffer_pool, ktorý udržiava index aktualizácií, ktoré ešte neboli zapísané do disku.
Keď DELETE
vyskytuje položka sa pridá do Zmena Rezervy povedať, že index záznam musí byť odstránená.
Pre UPDATE
dva vstupy môžu sa musia dať do CB.
Keď SELECT
používa ako index, skontroluje aj CB a reálne, na disku, BTree pre index. Že BTree je uložené vo vyrovnávacej pamäti (blok blok) v buffer_pool. (Blok je 16KB a môže mať sto(s) záznamov.)
CB je zapísané na disk "v pozadí" alebo "podľa potreby". Ktorý zahŕňa prijem index bloku (ak sa už vo vyrovnávacej pamäti), aktualizácia niektoré položky (delete, a/alebo pridať) a napíšte späť na disk. Oboch čítanie a písanie sú uložené vo vyrovnávacej pamäti v buffer_pool, tak buď, alebo ani môžu byť fyzické I/O.
MySQL nie je "obnoviť" pravidelné index ("preindexovanie") s výnimkou cez určité ALTERs
alebo OPTIMIZE
. To znamená, že všetky zmeny sú vyrobené na muchy. Činnosť CB je transparentné pre používateľa.