Når du bruger MySQL, kan du opleve, at selvom en tabel sletter en masse data, er datafilerne og indeksfilerne i tabellen mærkeligt små. Dette skyldes, at mysql efterlader mange datahuller, når data slettes (især Text og BLOB), hvilket vil optage pladsen i de oprindelige data, så filstørrelsen ændrer sig ikke. Disse huller kan genbruges i fremtiden, når data indsættes, og selvfølgelig kan de forblive der. Dette hul øger ikke kun lageromkostningerne, men reducerer også scanningseffektiviteten af tabellen på grund af datafragmentering.
Brugsscenarier:Hvis du har slettet en stor del af tabellen, eller hvis du har lavet mange ændringer i en tabel med rækker af variabel længde (en med VARCHAR-, BLOB- eller TEXT-kolonner), bør du bruge OPTIMIZE TABLE. Slettede poster gemmes i den linkede liste, og efterfølgende INSERT-operationer genbruger den gamle postplacering. Du kan bruge OPTIMIZE TABLE til at omdanne ubrugt plads og organisere fragmenter af datafiler. [Når en stor mængde data slettes fra dit bibliotek, kan du opleve, at datafilstørrelsen ikke er faldet. Dette skyldes fragmenteringen, der er tilbage i datafilen efter sletningsoperationen.
I de fleste indstillinger behøver du slet ikke køre OPTIMIZE TABLE. Selv hvis du laver mange opdateringer af rækker med variabel længde, behøver du ikke køre dem ofte, en gang om ugen eller en gang om måneden, kun for specifikke tabeller.
OPTIMIZE TABLE virker kun for MyISAM-, BDB- og InnoDB-tabeller.
For BDB-tabeller er OPTIMIZE TABLE i øjeblikket kortlagt til ANALYZE TABLE. For InnoDB-tabeller mappes OPTIMIZE TABLE til ALTER TABLE, som genopbygger tabellen. Genopbygningsoperationer, opdaterer indeksstatistikker og frigør ubrugt plads i klyngede indekser.
Bemærk: MySQL låser tabellen under OPTIMIZE TABLE-kørslen.
For myisam kan du direkte bruge optimeringstabellen table.name,Når det er InnoDB-motoren, vil den rapportere "Table doesn't support optimize, men laver recreate + analyze i stedet", og under normale omstændigheder, hvis du konverterer fra myisam til innodb, bruger du alter table table.name engine='innodb' til at konvertere, og du kan også bruge dette til optimering.Derfor, når det er InnoDB-motoren, kan vi bruge alter table table.name engine='innodb' i stedet for at optimere for optimering。
For at se før- og efter-effekterne kan du bruge kommandoen vis tabel status, såsom vis tabelstatus fra [database] som '[table_name]'; Den data_free i returresultatet er det opbevaringsrum, som tomrummet optager.
Shell-scriptet, der implementerer MySQL timed batch check table repair og optimerer table optimize-tabellen, er som følger:
Oprindelig:
Hyperlink-login er synlig.
Hyperlink-login er synlig.
|