Při používání mysql můžete zjistit, že i když tabulka maže hodně dat, datové a indexové soubory tabulky jsou podivně malé. Je to proto, že mysql při mazání dat (zejména textu a BLOB) zanechá mnoho datových mezer, které zabírají místo původních dat, takže velikost souboru se nemění. Tyto díry mohou být v budoucnu znovu použity při vložení dat, a samozřejmě tam mohou zůstat. Tato díra nejen zvyšuje náklady na úložiště, ale také snižuje efektivitu skenování tabulky kvůli fragmentaci dat.
Scénáře použití:Pokud jste smazali velkou část tabulky, nebo jste provedli mnoho změn v tabulce s řádky proměnné délky (například s VARCHAR, LOB nebo TEXT), měli byste použít OPTIMALIZACI TABULKY. Smazané záznamy jsou uchovávány v propojeném seznamu a následné operace INSERT znovu používají staré umístění záznamu. OPTIMIZE TABLE můžete použít k přepracování nevyužitého prostoru a organizaci fragmentů datových souborů. [Když je z knihovny smazáno velké množství dat, můžete zjistit, že velikost datového souboru se nezmenšila. To je způsobeno fragmentací, která v datovém souboru zůstává po operaci mazání.
Ve většině nastavení nemusíte vůbec spouštět OPTIMALIZACI TABULKY. I když často aktualizujete řádky s proměnnou délkou, nemusíte je spouštět často, jednou týdně nebo jednou za měsíc, jen pro konkrétní tabulky.
OPTIMALIZOVAT TABULKU funguje pouze pro tabulky MyISAM, BDB a InnoDB.
Pro tabulky BDB je tabulka OPTIMIZE aktuálně přiřazena k tabulce ANALYZOVAT. U tabulek InnoDB je OPTIMALIZAČNÍ TABULKA mapována na ALTER TABULKU, která tabulku znovu sestavuje. Operace obnovy, aktualizují statistiky indexů a uvolňují nevyužité místo ve shlukovaných indexech.
Poznámka: MySQL během běhu OPTIMIZE TABLE uzamkne tabulku.
Pro myisam můžete přímo použít optimalizační tabulku table.name,Když je to engine InnoDB, zobrazí se "Tabulka nepodporuje optimalizaci, místo toho dělá recreate + analyzovat", a za normálních okolností, pokud převedete z myisam na innodb, použijete alter table table.name engine='innodb' k převodu, a můžete to také použít pro optimalizaci.Proto když jde o engine InnoDB, můžeme použít alter table table.name engine='innodb' místo optimalizace。
Pro zobrazení před a po efektech můžete použít příkaz zobrazit stav tabulky, například zobrazit stav tabulky z [databáze] jako '[table_name]'; data_free ve výsledku návratu je úložný prostor zabíraný prázdnotou.
Shell skript, který implementuje MySQL časově dávkovou opravu kontrolní tabulky a optimalizaci tabulky optimalizace tabulky, je následující:
Původní:
Přihlášení k hypertextovému odkazu je viditelné.
Přihlášení k hypertextovému odkazu je viditelné.
|