Что означает" таблица не поддерживает оптимизацию, вместо этого делает recreate + analyze"?
Я работаю над MySQL 5.5 и пытаюсь сделать перестройку индекса с помощью OPTIMIZE TABLE запрос. Я получаю сообщение об ошибке ниже:
таблица не поддерживает оптимизацию, делая recreate + analyze вместо
что это значит? Движок MySQL не позволяет перестроить индекс? Что делается за этим сообщением,на уровне MySQL 5.5 Engine?
4 ответов:
Это действительно информационное сообщение.
Вероятно, вы делаете оптимизацию на InnoDB таблица (таблица с использованием механизма хранения InnoDB, а не MyISAM механизм хранения).
InnoDB не поддерживает оптимизацию так, как это делает MyISAM. Он делает что-то другое. Он создает пустую таблицу и копирует в нее все строки из существующей таблицы, по существу удаляет старую таблицу и переименовывает новую таблицу, а затем запускает анализ для сбора статистики. Это самое близкое, что InnoDB может сделать для оптимизации.
сообщение, которое вы получаете, в основном MySQL server повторяет то, что InnoDB storage engine сказал MySQL server:
таблица не поддерживает оптимизации говорит двигатель хранения InnoDB...
" Я (InnoDB storage engine) не делаю операцию оптимизации, как мой друг (MyISAM storage engine) делает."
"делаешь воссоздать + проанализировать вместо" говорит двигатель хранения 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>;переименовать новый.Имя.Таблица и таблица.Авария
RENAME TABLE <TABLE.CRASHED> TO <TABLE.CRASHED.BACKUP>; RENAME TABLE <NEW.NAME.TABLE> TO <TABLE.CRASHED>;после работы хорошо, удалить
DROP TABLE <TABLE.CRASHED.BACKUP>;
лучший вариант-создать новую таблицу скопируйте строки в целевую таблицу, удалите фактическую таблицу и переименуйте вновь созданную таблицу . Этот метод хорош для небольших таблиц,
Comments