To naprawdę wiadomość informacyjna.
Prawdopodobnie wykonujesz OPTYMALIZACJĘ na tabeli InnoDB (tabela przy użyciu silnika pamięci InnoDB, a nie silnika pamięci MyISAM ).
InnoDB nie obsługuje OPTYMALIZACJI tak jak MyISAM. Robi coś innego. Tworzy pustą tabelę i kopiuje do niej wszystkie wiersze z istniejącej tabeli i zasadniczo usuwa starą tabelę i zmienia nazwę nowej tabeli, a następnie uruchamia ANALIZĘ w celu zebrania statystyk. To najbliższe osiągnięcie przez InnoDB OPTYMALIZACJI.
Wiadomość, którą otrzymujesz, to w zasadzie serwer MySQL powtarzający to, co silnik pamięci masowej InnoDB powiedział serwerowi MySQL:
Tabela nie obsługuje optymalizacji , mówi silnik magazynu InnoDB ...
„Ja (silnik pamięci masowej InnoDB) nie wykonuję operacji OPTYMALIZACJI, tak jak robi to mój przyjaciel (silnik pamięci masowej MyISAM)”.
„zamiast tego wykonuję ponowne tworzenie i analizowanie”, tak mówi silnik magazynu InnoDB ...
„Zdecydowałem się wykonać inny zestaw operacji, które dadzą równoważny wynik”.
OPTIMIZE TABLE
działa dobrze z silnikiem InnoDB zgodnie z oficjalnym artykułem pomocy: http://dev.mysql.com/doc/refman/5.5/en/optimize-table.htmlZauważysz, że optymalizacja tabel InnoDB odbuduje strukturę tabeli i zaktualizuje statystyki indeksu (coś podobnego
ALTER TABLE
).Pamiętaj, że ta wiadomość może być tylko informacją, a bardzo ważną informacją jest stan Twojego zapytania: po prostu OK!
mysql> OPTIMIZE TABLE foo; +----------+----------+----------+-------------------------------------------------------------------+ | Table | Op | Msg_type | Msg_text | +----------+----------+----------+-------------------------------------------------------------------+ | test.foo | optimize | note | Table does not support optimize, doing recreate + analyze instead | | test.foo | optimize | status | OK | +----------+----------+----------+-------------------------------------------------------------------+
źródło
Najlepszą opcją jest utworzenie nowej tabeli o takich samych właściwościach
CREATE TABLE <NEW.NAME.TABLE> LIKE <TABLE.CRASHED>; INSERT INTO <NEW.NAME.TABLE> SELECT * FROM <TABLE.CRASHED>;
Zmień nazwy NEW.NAME.TABLE i TABLE.CRASH
RENAME TABLE <TABLE.CRASHED> TO <TABLE.CRASHED.BACKUP>; RENAME TABLE <NEW.NAME.TABLE> TO <TABLE.CRASHED>;
Po zakończeniu pracy usuń
DROP TABLE <TABLE.CRASHED.BACKUP>;
źródło
Lepszą opcją jest utworzenie nowej tabeli, skopiowanie wierszy do tabeli docelowej, usunięcie rzeczywistej tabeli i zmiana nazwy nowo utworzonej tabeli. Ta metoda jest dobra dla małych stołów,
źródło