Należy pamiętać, że OPTIMIZE TABLE nie wykonuje defragmentacji. Wewnętrznie OPTYMALIZUJ TABELĘ wykonuj kilka operacji (kopiowanie danych do pliku tymczasowego, odtwarzanie indeksów, przeliczanie statystyk indeksów). W rzeczywistości przykład, który mam, można wykonać ręcznie, jak pokazano.
Przykład: jeśli zoptymalizujesz mydb.mytable
, wpisz następujące polecenie:
OPTIMIZE TABLE mydb.mytable;
Zauważ, że mysql wykonuje następujące działania pod maską:
CREATE TABLE mydb.mytable2 LIKE mydb.mytable;
ALTER TABLE mydb.mytable2 DISABLE KEYS;
INSERT INTO mydb.mytable2 SELECT * FROM mydb.mytable;
ALTER TABLE mydb.mytable2 ENABLE KEYS;
DROP TABLE mydb.mytable;
ALTER TABLE mydb.mytable2 RENAME mydb.mytable;
ANALYZE TABLE mydb.mytable;
Jest to bardzo przydatne w przypadku tabel, w których występuje duża liczba aktualizacji i usuwania
Wykonanie tego może osiągnąć dwie rzeczy
Zapobiegaj przeszukiwaniu przez mysql fragmentów w tabeli podczas próby załadowania danych do fragmentów o odpowiedniej wielkości. Wyeliminowanie tych fragmentów ograniczy tę operację.
Ponowne obliczenie statystyki indeksu pomaga Optymalizatorowi zapytań MySQL konstruować lepsze plany EXPLAIN. W przeciwnym razie zapytania mogą ulec pogorszeniu w czasie wykonywania, ponieważ Optymalizator zapytań MySQL postanowił zgadywać w planie EXPLAIN. Byłby to wyraźny objaw tabeli, która ma dużą liczbę aktualizacji i usuwania.
CAVEAT
Jeśli chodzi o buforowanie, buforowanie wymaga szybkiego nurkowania ze względu na skanowanie pełnego stołu. Strony indeksu MyISAM wpływają i wypływają z pamięci podręcznej kluczy MyISAM. W przypadku InnoDB dane i strony indeksowe wpływają i wypływają z puli buforów InnoDB.