Это действительно информационное сообщение.
Скорее всего, вы выполняете OPTIMIZE для таблицы InnoDB (таблица, использующая механизм хранения InnoDB, а не механизм хранения MyISAM ).
InnoDB не поддерживает OPTIMIZE, как MyISAM. Это что-то другое. Он создает пустую таблицу и копирует в нее все строки из существующей таблицы, по существу удаляет старую таблицу и переименовывает новую таблицу, а затем запускает АНАЛИЗ для сбора статистики. Это самое близкое, что InnoDB может сделать для ОПТИМИЗАЦИИ.
Сообщение, которое вы получаете, в основном повторяет сервер MySQL то, что механизм хранения InnoDB сказал серверу MySQL:
Таблица не поддерживает оптимизацию - это механизм хранения InnoDB, говорящий ...
«Я (механизм хранения InnoDB) не выполняю операцию OPTIMIZE, как мой друг (механизм хранения MyISAM)».
"вместо этого выполняем воссоздание + анализ", - говорит механизм хранения InnoDB ...
«Я решил выполнить другой набор операций, который даст эквивалентный результат».
OPTIMIZE TABLE
отлично работает с движком InnoDB согласно официальной статье поддержки: http://dev.mysql.com/doc/refman/5.5/en/optimize-table.htmlВы заметите, что оптимизация таблиц InnoDB перестроит структуру таблицы и обновит статистику индекса (что-то вроде
ALTER TABLE
).Имейте в виду, что это сообщение может быть только информационным упоминанием, и очень важная информация - это статус вашего запроса: просто ОК!
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 | +----------+----------+----------+-------------------------------------------------------------------+
источник
Лучший вариант - создать новую таблицу с такими же свойствами
CREATE TABLE <NEW.NAME.TABLE> LIKE <TABLE.CRASHED>; INSERT INTO <NEW.NAME.TABLE> SELECT * FROM <TABLE.CRASHED>;
Переименуйте NEW.NAME.TABLE и TABLE.CRASH.
RENAME TABLE <TABLE.CRASHED> TO <TABLE.CRASHED.BACKUP>; RENAME TABLE <NEW.NAME.TABLE> TO <TABLE.CRASHED>;
После работы удаляем
DROP TABLE <TABLE.CRASHED.BACKUP>;
источник
Лучший вариант - создать новую таблицу, скопировать строки в целевую таблицу, удалить фактическую таблицу и переименовать вновь созданную таблицу. Этот метод хорош для небольших столов,
источник