Pri uporabi mysql lahko ugotovite, da čeprav tabela izbriše veliko podatkov, so podatkovne datoteke in indeksne datoteke v tabeli nenavadno majhne. To je zato, ker mysql pusti veliko podatkovnih lukenj pri brisanju podatkov (še posebej besedila in BLOB), ki zavzamejo prostor izvirnih podatkov, zato se velikost datoteke ne spremeni. Te luknje se lahko v prihodnosti ponovno uporabijo, ko bodo podatki vstavljeni, in seveda lahko ostanejo tam. Ta luknja ne povečuje le stroškov shranjevanja, ampak tudi zmanjša učinkovitost skeniranja tabele zaradi fragmentacije podatkov.
Scenariji uporabe:Če ste izbrisali velik del tabele ali če ste naredili veliko sprememb v tabeli z vrsticami spremenljive dolžine (ena z stolpci VARCHAR, BLOB ali TEXT), uporabite OPTIMIZE TABLE. Izbrisani zapisi ostanejo v povezanem seznamu, nadaljnje operacije INSERT pa ponovno uporabijo staro lokacijo zapisa. Uporabite lahko OPTIMIZE TABLE za ponovno uporabo neuporabljenega prostora in organizacijo fragmentov podatkovnih datotek. [Ko je iz vaše knjižnice izbrisana velika količina podatkov, lahko ugotovite, da se velikost podatkovne datoteke ni zmanjšala. To je posledica fragmentacije, ki ostane v podatkovni datoteki po operaciji brisanja.
V večini okolij sploh ni treba zagnati OPTIMIZE TABLE. Tudi če veliko posodabljate vrstice spremenljive dolžine, jih ni treba pogosto izvajati, enkrat na teden ali enkrat na mesec, le za določene tabele.
OPTIMIZE TABELA deluje samo za tabele MyISAM, BDB in InnoDB.
Za BDB tabele je OPTIMIZE TABELA trenutno preslikana na ANALYZE TABELO. Za tabele InnoDB se OPTIMIZE TABELA preslika na ALTER TABELO, ki tabelo ponovno zgradi. Operacije obnove, posodobijo statistiko indeksa in sprostijo neizkoriščen prostor v gručenih indeksih.
Opomba: MySQL zaklene tabelo med izvajanjem OPTIMIZE TABLE.
Za myisam lahko neposredno uporabite optimizacijsko tabelo table.name,Ko gre za InnoDB pogon, bo poročal "Tabela ne podpira optimizacije, namesto tega izvajam recreate + analyse", in v običajnih okoliščinah, če pretvorite iz myisam v innodb, boste uporabili alter tabelo table.name engine='innodb' za pretvorbo, kar lahko uporabite tudi za optimizacijo.Zato lahko, kadar gre za InnoDB pogon, namesto optimizacije uporabimo alter tabelo table.name engine='innodb'。
Za ogled pred in po efektih lahko uporabite ukaz za prikaz stanja tabele, na primer prikaz stanja tabele iz [baze podatkov], kot je '[table_name]'; data_free v povratnem rezultatu je shranjevalni prostor, ki ga zaseda praznina.
Shell skripta, ki izvaja MySQL časovno paketno popravilo kontrolne tabele in optimizacijo tabele za optimizacijo tabele, je naslednja:
Izvirno:
Prijava do hiperpovezave je vidna.
Prijava do hiperpovezave je vidna.
|