Informace, které máte v otázce týkající se MyISAM, jsou správné. Rád bych však odpověděl na vaše dvě dodatečné otázky:
POSLEDNÍ OTÁZKA
Podle knihy
Kapitola 10:„Storage Engines“ Strana 196 Odstavec 7 říká
Na základě tohoto odstavce se starý záznam přepíše daty propojení pouze v případě, že se nová data, která se mají vložit, nevejdou do dříve přiděleného bloku. To může vést k mnoha nafouknutým řádkům.
DALŠÍ OTÁZKA
Z mé předchozí odpovědi by bylo mnoho bloků, které mají
- blok prostoru
- délka záznamu
- počet nepoužitých bajtů v bloku
- Příznaky indikátoru hodnoty NULL
- případně ukazatel na pokračování záznamu, pokud se záznam nevešel do dříve vytvořeného prostoru a musel být rozdělen
Takové odkazy na záznamy by začínaly v popředí každého řádku, do kterého by se vkládala příliš velká data. To může nafouknout MyISAM tabulky .MYD
soubor velmi rychle.
NÁVRHY
Výchozí formát řádků MyISAM je Dynamický. Když je tabulka dynamická a zaznamenává mnoho INSERTů, AKTUALIZACÍ a DELETE, bude třeba takovou tabulku optimalizovat pomocí
OPTIMIZE TABLE mytable;
Existuje alternativa:přepněte formát řádku tabulky na Pevný. Tímto způsobem budou mít všechny řádky stejnou velikost. Tímto způsobem nastavíte formát řádku na pevný:
ALTER TABLE mytable ROW_FORMAT=Fixed;
Dokonce i s pevným formátem řádků musí nalezení dostupného záznamu zabrat čas, ale čas by byl O(1) čas hledání (Laicky řečeno, nalezení dostupného záznamu by trvalo stejně dlouho bez ohledu na počet řádků tabulka má nebo kolik je smazaných řádků). Tento krok můžete obejít povolením concurrent_insert takto:
Přidejte toto do my.cnf
[mysqld]
concurrent_insert = 2
Restart MySQL není vyžadován. Stačí běž
mysql> SET GLOBAL concurrent_insert = 2;
To by způsobilo, že by se všechny INSERTy přesunuly na konec tabulky, aniž by hledaly volné místo.
Výhoda tabulek s pevnými řádky
- VLOŽENÍ, AKTUALIZACE a DELETE by byly poněkud rychlejší
- SELECT jsou o 20–25 % rychlejší
Zde jsou některé z mých příspěvků o tom, že SELECT je rychlejší pro Opravované formáty řádků
May 03, 2012
:Co je rychlejší, InnoDB nebo MyISAM?Sep 20, 2011
:To nejlepší z MyISAM a InnoDBMay 10, 2011
:Jaký je dopad na výkon použití CHAR vs VARCHAR na poli s pevnou velikostí?
Nevýhoda tabulek s pevnými řádky
Ve většině případů, když spustíte ALTER TABLE mytable ROW_FORMAT=Fixed;
, tabulka může růst o 80-100 %. .MYI
soubor (stránky indexu pro tabulku MyISAM) by také rostl stejnou rychlostí.
EPILOG
Pokud chcete rychlost pro stoly MyISAM a dokážete žít s většími stoly, budou zapotřebí mé alternativní návrhy. Pokud chcete ušetřit místo pro každou tabulku MyISAM, ponechte formát řádků tak, jak je (Dynamický). Budete muset zkomprimovat tabulku pomocí OPTIMIZE TABLE mytable;
častější u dynamických tabulek.