Når du bruker MySQL, kan du oppdage at selv om en tabell sletter mye data, er datafilene og indeksfilene i tabellen merkelig små. Dette er fordi MySQL vil etterlate mange datahull når data slettes (spesielt Text og BLOB), som vil oppta plassen til de opprinnelige dataene, så filstørrelsen endres ikke. Disse hullene kan gjenbrukes i fremtiden når data legges inn, og selvfølgelig kan de forbli der. Dette hullet øker ikke bare lagringskostnadene, men reduserer også skanneeffektiviteten til tabellen på grunn av datafragmentering.
Bruksscenarier:Hvis du har slettet en stor del av tabellen, eller hvis du har gjort mange endringer i en tabell med rader med variabel lengde (en med VARCHAR-, BLOB- eller TEXT-kolonner), bør du bruke OPTIMIZE TABLE. Slettede poster beholdes i den lenkede listen, og påfølgende INSERT-operasjoner gjenbruker den gamle postplasseringen. Du kan bruke OPTIMIZE TABLE for å ombruke ubrukt plass og organisere fragmenter av datafiler. [Når store mengder data slettes fra biblioteket ditt, kan du oppdage at filstørrelsen ikke har blitt mindre. Dette skyldes fragmenteringen som ble igjen i datafilen etter slettingsoperasjonen.
I de fleste settinger trenger du ikke å kjøre OPTIMIZE TABLE i det hele tatt. Selv om du gjør mange oppdateringer på rader med variabel lengde, trenger du ikke å kjøre dem ofte, én gang i uken eller én gang i måneden, bare for spesifikke tabeller.
OPTIMIZE TABLE fungerer kun for MyISAM, BDB og InnoDB-tabeller.
For BDB-tabeller er OPTIMIZE TABLE for øyeblikket mappet til ANALYZE TABLE. For InnoDB-tabeller er OPTIMIZE TABLE mappet til ALTER TABLE, som bygger opp tabellen på nytt. Gjenoppbyggingsoperasjoner, oppdaterer indeksstatistikk og frigjør ubrukt plass i klyngede indekser.
Merk: MySQL låser tabellen under OPTIMIZE TABLE-kjøringen.
For myisam kan du direkte bruke optimaliseringstabellen table.name,Når det er InnoDB-motoren, vil den rapportere "Table doesn't support optimize, doing recreate + analyze i stedet", og under normale omstendigheter, hvis du konverterer fra myisam til innodb, vil du bruke alter table table.name engine='innodb' for å konvertere, og du kan også bruke dette til optimalisering.Derfor, når det er InnoDB-motoren, kan vi bruke alter table table.name engine='innodb' i stedet for å optimalisere for optimalisering。
For å se før- og ettereffektene kan du bruke kommandoen vis tabellstatus, for eksempel vis tabellstatus fra [database] som '[table_name]'; data_free i returresultatet er lagringsplassen som opptas av tomrommet.
Shell-skriptet som implementerer MySQL Timed batch-sjekk tabellreparasjon og optimalisert tabelloptimaliseringstabell er som følger:
Original:
Innloggingen med hyperkoblingen er synlig.
Innloggingen med hyperkoblingen er synlig.
|