Pri používaní mysql môžete zistiť, že hoci tabuľka maže veľa dát, dátové a indexové súbory tabuľky sú zvláštne malé. Je to preto, že mysql pri mazaní dát (najmä textu a BLOB) zanecháva veľa dátových dier, ktoré zaberajú miesto pôvodných dát, takže veľkosť súboru sa nemení. Tieto diery môžu byť v budúcnosti znovu použité pri vkladaní dát, a samozrejme tam môžu zostať. Táto diera nielenže zvyšuje náklady na ukladanie, ale tiež znižuje efektivitu skenovania tabuľky v dôsledku fragmentácie dát.
Scenáre použitia:Ak ste vymazali veľkú časť tabuľky alebo ste urobili veľa zmien v tabuľke s riadkami s variabilnou dĺžkou (napríklad s VARCHAR, LOB alebo TEXT), mali by ste použiť OPTIMALIZOVAŤ TABUĽKU. Vymazané záznamy sa uchovávajú v prepojenom zozname a následné operácie INSERT opätovne používajú staré miesto záznamu. OPTIMALIZOVAŤ TABUĽKU môžete použiť na opätovné využitie nevyužitého priestoru a usporiadanie fragmentov dátových súborov. [Keď je z vašej knižnice vymazané veľké množstvo dát, môžete zistiť, že veľkosť dátového súboru sa nezmenšila. Je to spôsobené fragmentáciou, ktorá zostane v dátovom súbore po operácii vymazania.
Vo väčšine nastavení nemusíte vôbec spúšťať OPTIMALIZOVANÚ TABUĽKU. Aj keď robíte veľa aktualizácií riadkov s premenlivou dĺžkou, nemusíte ich spúšťať často, raz týždenne alebo raz za mesiac, len pre konkrétne tabuľky.
OPTIMALIZOVAŤ TABUĽKU funguje iba pre tabuľky MyISAM, BDB a InnoDB.
Pre BDB tabuľky je OPTIMALIZOVANÁ TABUĽKA momentálne mapovaná na ANALYZOVAŤ TABUĽKU. Pre tabuľky InnoDB je OPTIMALIZOVANÁ TABUĽKA mapovaná na ALTER TABUĽKU, ktorá tabuľku znovu vybuduje. Operácie obnovy aktualizujú štatistiky indexov a uvoľňujú nevyužitý priestor v zhlukovaných indexoch.
Poznámka: MySQL uzamkne tabuľku počas spustenia OPTIMALIZOVANEJ TABUĽKY.
Pre myisam môžete priamo použiť optimalizovanú tabuľku table.name,Keď ide o engine InnoDB, zobrazí sa "Tabuľka nepodporuje optimalizáciu, robí recreate + analyze namiesto toho", a za normálnych okolností, ak konvertujete z myisam na innodb, použijete alter table table.name engine='innodb' na konverziu, ktorú môžete použiť aj na optimalizáciu.Preto, keď ide o engine InnoDB, môžeme namiesto optimalizácie použiť alter table table.name engine='innodb'。
Na zobrazenie pred a po efektoch môžete použiť príkaz zobraziť stav tabuľky, napríklad zobraziť stav tabuľky z [databázy] ako '[table_name]'; data_free vo výsledku návratu je úložný priestor zabratý prázdnym miestom.
Shell skript, ktorý implementuje MySQL časovanú opravu dávkových kontrolných tabuliek a optimalizáciu tabuľky optimalizácie tabuliek, je nasledovný:
Originál:
Prihlásenie na hypertextový odkaz je viditeľné.
Prihlásenie na hypertextový odkaz je viditeľné.
|