Korzystając z mysql, możesz zauważyć, że chociaż tabela usuwa dużo danych, pliki danych i indeksy tabeli są dziwnie małe. Dzieje się tak, ponieważ mysql pozostawia wiele luk w danych podczas usuwania danych (szczególnie tekstu i BLOB), które zajmują miejsce oryginalnych danych, więc rozmiar pliku się nie zmienia. Te otwory mogą być ponownie wykorzystane w przyszłości po wstawianiu danych, i oczywiście mogą tam pozostać. Ta nie tylko zwiększa koszty przechowywania, ale także zmniejsza efektywność skanowania tabeli z powodu fragmentacji danych.
Scenariusze użycia:Jeśli usunąłeś dużą część tabeli lub wprowadziłeś wiele zmian w tabeli o zmiennej długości wierszy (jednej z kolumnami VARCHAR, LOB lub TEXT), powinieneś użyć OPTIMIZE TABLE. Usunięte rekordy są przechowywane w powiązanej liście, a kolejne operacje INSERT ponownie wykorzystują starą lokalizację rekordu. Możesz użyć OPTIMIZE TABLE, aby przekształcić niewykorzystaną przestrzeń i organizować fragmenty plików danych. [Gdy duża ilość danych zostanie usunięta z Twojej biblioteki, możesz zauważyć, że rozmiar pliku danych nie zmniejszył się. Wynika to z fragmentacji pozostawionej w pliku danych po operacji usuwania.
W większości ustawień w ogóle nie musisz uruchamiać OPTYMALIZACJI TABELI. Nawet jeśli często aktualizujesz wiersze o zmiennej długości, nie musisz ich często uruchamiać, raz w tygodniu czy raz w miesiącu, tylko dla konkretnych tabel.
OPTIMIZE TABLE działa tylko dla tabel MyISAM, BDB i InnoDB.
Dla tabel BDB tabela OPTIMIZE jest obecnie mapowana na TABELĘ ANALIZUJ. W tabelach InnoDB tabela OPTIMIZE jest mapowana na ALTER TABLE, co odbudowuje tę tabelę. Operacje odbudowy, aktualizują statystyki indeksu i zwalniają niewykorzystaną przestrzeń w klastrowanych indeksach.
Uwaga: MySQL blokuje tabelę podczas uruchomienia OPTIMIZE TABLE.
Dla myisam możesz bezpośrednio użyć tabeli optymalizacyjnej table.name,Gdy jest to silnik InnoDB, pojawi się komunikat "Tabela nie obsługuje optymalizacji, zamiast tego recreate + analyzować", a w normalnych warunkach, jeśli konwertujesz z myisam na innodb, użyjesz alter table table.name engine='innodb' do konwersji, a także możesz tego użyć do optymalizacji.Dlatego gdy jest to silnik InnoDB, możemy użyć alter table table.name engine='innodb' zamiast optymalizować pod optymalizację。
Aby zobaczyć efekty przed i po, możesz użyć polecenia pokaz status tabeli, na przykład pokaz status tabeli z [bazy danych], np. '[table_name]'; data_free w wyniku zwrotu to przestrzeń magazynowa zajmowana przez pustkę.
Skrypt powłoki implementujący naprawę tabeli kontrolnej w określonym czasie MySQL oraz optymalizację tabeli optymalizacji tabel jest następujący:
Oryginał:
Logowanie do linku jest widoczne.
Logowanie do linku jest widoczne.
|