Bei der Verwendung von MySQL kann es sein, dass eine Tabelle zwar viele Daten löscht, aber die Daten- und Indexdateien der Tabelle seltsam klein sind. Das liegt daran, dass MySQL beim Löschen von Daten (insbesondere Text und BLOB) viele Datenlücken hinterlässt, was den Speicherplatz der ursprünglichen Daten belegt, sodass sich die Dateigröße nicht ändert. Diese Löcher können in Zukunft wiederverwendet werden, wenn Daten eingefügt werden, und natürlich können sie dort bleiben. Diese Lücke erhöht nicht nur die Speicherkosten, sondern verringert auch die Scan-Effizienz der Tabelle aufgrund der Datenfragmentierung.
Anwendungsszenarien:Wenn Sie einen großen Teil der Tabelle gelöscht haben oder viele Änderungen an einer Tabelle mit variablen Zeilen vorgenommen haben (eine mit VARCHAR-, BLOB- oder TEXT-Spalten), sollten Sie OPTIMIZE TABLE verwenden. Gelöschte Datensätze werden in der verknüpften Liste gespeichert, und nachfolgende INSERT-Operationen verwenden den alten Datensatzstandort wieder. Du kannst OPTIMIZE TABLE verwenden, um ungenutzten Speicherplatz umzusetzen und Datenfragmente zu organisieren. [Wenn eine große Menge Daten aus deiner Bibliothek gelöscht wird, kann es sein, dass die Dateigröße nicht verringert ist. Dies ist auf die Fragmentierung zurückzuführen, die nach der Löschoperation in der Datendatei zurückbleibt.
In den meisten Einstellungen musst du OPTIMIZE TABLE überhaupt nicht ausführen. Selbst wenn du viele Zeilen mit variabler Länge machst, musst du sie nicht oft ausführen, einmal pro Woche oder einmal im Monat, nur für bestimmte Tabellen.
OPTIMIZE TABLE funktioniert nur für MyISAM-, BDB- und InnoDB-Tabellen.
Für BDB-Tabellen wird die OPTIMIZE TABLE derzeit der ANALYZE TABLE zugeordnet. Für InnoDB-Tabellen wird die OPTIMIZE TABLE auf die ALTER TABLE abgebildet, die die Tabelle neu aufbaut. Operationen neu aufbauen, Indexstatistiken aktualisieren und ungenutzten Speicherplatz in geclusterten Indizes freimachen.
Hinweis: MySQL sperrt die Tabelle während des OPTIMIZE TABLE-Laufs.
Für myisam kannst du direkt die Optimiertabelle table.name verwenden,Wenn es sich um die InnoDB-Engine handelt, meldet sie: "Tabelle unterstützt nicht optimieren, sondern recreate + analyze stattdessen", und unter normalen Umständen, wenn du von myisam zu innodb konvertierst, nutzt du alter table table.name engine = 'innodb' zur Konvertierung, und du kannst das auch zur Optimierung nutzen.Daher können wir, wenn es sich um die InnoDB-Engine handelt, "alter table table.name engine='innodb' verwenden, anstatt optimieren für Optimierung。
Um die Vorher- und Nachher-Effekte anzuzeigen, können Sie den Befehl "Tabellenstatus anzeigen" verwenden, zum Beispiel "Tabellenstatus aus [Datenbank] anzeigen, wie "[table_name]"; Der data_free im Rückgabeergebnis ist der Speicherplatz, der vom Void eingenommen wird.
Das Shell-Skript, das MySQL Timed Batch Check Table Reparatur und Tabellenoptimierung implementiert, ist wie folgt:
Original:
Der Hyperlink-Login ist sichtbar.
Der Hyperlink-Login ist sichtbar.
|