Что означает" таблица не поддерживает оптимизацию, вместо этого делает recreate + analyze"?


Я работаю над MySQL 5.5 и пытаюсь сделать перестройку индекса с помощью OPTIMIZE TABLE запрос. Я получаю сообщение об ошибке ниже:

таблица не поддерживает оптимизацию, делая recreate + analyze вместо

что это значит? Движок MySQL не позволяет перестроить индекс? Что делается за этим сообщением,на уровне MySQL 5.5 Engine?

4   51   2015-06-04 08:29:28

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>;

лучший вариант-создать новую таблицу скопируйте строки в целевую таблицу, удалите фактическую таблицу и переименуйте вновь созданную таблицу . Этот метод хорош для небольших таблиц,