Când folosești mysql, s-ar putea să observi că, deși un tabel șterge multe date, fișierele de date și fișierele index ale tabelului sunt ciudat de mici. Acest lucru se datorează faptului că mysql va lăsa multe goluri de date la ștergerea datelor (în special Text și BLOB), care vor ocupa spațiul datelor originale, astfel încât dimensiunea fișierului să nu se schimbe. Aceste găuri pot fi reutilizate în viitor, când datele sunt introduse, și, desigur, pot rămâne acolo. Această gaură nu doar că crește costul de stocare, dar reduce și eficiența scanării tabelului din cauza fragmentării datelor.
Scenarii de utilizare:Dacă ai șters o mare parte din tabel sau dacă ai făcut multe modificări într-un tabel cu rânduri de lungime variabilă (unul cu coloane VARCHAR, BLOB sau TEXT), ar trebui să folosești OPTIMIZE TABLE. Înregistrările șterse sunt păstrate în lista legată, iar operațiunile ulterioare INSERT reutilizează locația veche a înregistrărilor. Poți folosi OPTIMIZE TABLE pentru a refolosi spațiul nefolosit și a organiza fragmente de fișiere de date. [Când o cantitate mare de date este ștearsă din biblioteca ta, este posibil să descoperi că dimensiunea fișierului de date nu a scăzut. Acest lucru se datorează fragmentării lăsate în fișierul de date după operația de ștergere.
În majoritatea setărilor, nu trebuie să rulezi deloc OPTIMIZE TABLE. Chiar dacă faci multe actualizări la rânduri de lungime variabilă, nu trebuie să le rulezi des, o dată pe săptămână sau o dată pe lună, doar pentru tabele specifice.
OPTIMIZE TABLE funcționează doar pentru tabelele MyISAM, BDB și InnoDB.
Pentru tabelele BDB, TABELUL OPTIMIZE este în prezent mapat la TABELUL ANALIZĂ. Pentru tabelele InnoDB, TABELUL OPTIMIZE este mapat la TABELUL ALTER, care reconstruiește tabelul. Operațiunile de reconstrucție actualizează statisticile indexului și eliberează spațiu neutilizat în indicii clusterați.
Notă: MySQL blochează tabelul în timpul rulării OPTIMIZE TABLE.
Pentru myisam, poți folosi direct tabelul de optimizare table.name,Când este vorba de motorul InnoDB, va raporta "Table does not support optimize, fac recreate + analyze" în schimb", iar în condiții normale, dacă convertești de la myisam la innodb, vei folosi alter table table.name engine='innodb' pentru convertire, și poți folosi și asta pentru optimizare.Prin urmare, când este vorba de motorul InnoDB, putem folosi alter table table.name engine='innodb' în loc de optimizare。
Pentru a vizualiza efectele înainte și după efecte, poți folosi comanda de afișare a statusului tabelului, cum ar fi afișarea statusului tabelului din [baza de date], cum ar fi "[table_name]"; data_free în rezultatul de retur este spațiul de stocare ocupat de vid.
Scriptul shell care implementează repararea tabelelor de verificare în loturi temporizate MySQL și tabelul de optimizare a tabelelor este următorul:
Original:
Autentificarea cu hyperlink este vizibilă.
Autentificarea cu hyperlink este vizibilă.
|