Spec-Zone .ru
спецификации, руководства, описания, API

13.7.2.4. OPTIMIZE TABLE Синтаксис

OPTIMIZE [NO_WRITE_TO_BINLOG | LOCAL] TABLE    tbl_name [, tbl_name] ...

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

Использовать OPTIMIZE TABLE в этих случаях, в зависимости от типа таблицы:

Этот оператор требует SELECT и INSERT полномочия для таблицы.

OPTIMIZE TABLE также поддерживается для разделенных таблиц. Для получения информации об использовании этого оператора с разделенными таблицами и табличными разделами, см. Раздел 18.3.4, "Обслуживание Разделов".

В MySQL 5.6.11 только, gtid_next должен быть установлен в AUTOMATIC прежде, чем сделать это заявление. (Ошибка #16062608, Ошибка #16715809, Ошибка #69045)

OPTIMIZE TABLE работы для InnoDB, MyISAM, и ARCHIVE таблицы. OPTIMIZE TABLE также поддерживается для динамических столбцов в памяти NDB таблицы. Это не работает на Дисковые Таблицы данных. Производительность OPTIMIZE на Кластере таблицы могут быть настроены, корректируя значение ndb_optimization_delay системная переменная, которая управляет числом миллисекунд, чтобы ожидать между обработкой пакетов строк OPTIMIZE TABLE. Для получения дополнительной информации см. Раздел 17.1.6.11, "Предыдущий MySQL Cluster Issues Resolved в MySQL Cluster NDB 7.3".

Для таблиц MySQL Cluster, OPTIMIZE TABLE может быть прерван, (например) уничтожая поток SQL, выполняющий OPTIMIZE работа.

По умолчанию, OPTIMIZE TABLE не работает на таблицы, составленные, используя любой другой механизм хранения, и возвращает результат, указывающий на эту нехватку поддержки. Можно сделать OPTIMIZE TABLE работа для других механизмов хранения, запускаясь mysqld с --skip-new опция. В этом случае, OPTIMIZE TABLE был только отображен на ALTER TABLE.

Детали InnoDB

Для InnoDB таблицы, OPTIMIZE TABLE отображается на ALTER TABLE, который восстанавливает таблицу, чтобы обновить, индексируют статистику и свободное неиспользуемое место в кластерном индексе. Это выводится на экран в выводе OPTIMIZE TABLE когда Вы работаете на этом InnoDB таблица, как показано здесь:

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

Эта работа не использует быстрое создание индекса. Вторичный индексирует, не создаются как эффективно, потому что ключи вставляются в порядок, они появились в первичном ключе. См. Раздел 5.5.9, "Ограничения Онлайнового DDL".

InnoDB данные хранилищ, используя метод выделения страницы и не страдают от фрагментации таким же образом что механизмы хранения наследства (такой как MyISAM) будет. Когда рассмотрение, работать ли, оптимизирует, рассматривает рабочую нагрузку транзакций, которые обработает Ваш сервер:

Детали MyISAM

Для MyISAM таблицы, OPTIMIZE TABLE работы следующим образом:

  1. Если таблица удалила или разделила строки, восстановите таблицу.

  2. Если индексные страницы не сортируются, сортируют их.

  3. Если статистические данные таблицы не современны (и восстановление не могло бы быть выполнено, сортируя индексирование), обновите их.

Другие Соображения

OPTIMIZE TABLE возвращает набор результатов со следующими столбцами.

Столбец Значение
Table Имя таблицы
Op Всегда optimize
Msg_type status, error, info, note, илиwarning
Msg_text Информационное сообщение

Отметьте, что MySQL блокирует таблицу в течение времени OPTIMIZE TABLE работает.

По умолчанию, записи сервера OPTIMIZE TABLE операторы к двоичному журналу так, чтобы они тиражировались к ведомым устройствам репликации. Чтобы подавить журналирование, определите дополнительное NO_WRITE_TO_BINLOG ключевое слово или его псевдоним LOCAL.

OPTIMIZE TABLE не сортирует R-древовидные-индексы, такой, поскольку пространственный индексирует на POINT столбцы. (Ошибка #23578)

OPTIMIZE TABLE таблица ловит и бросает любые ошибки, которые происходят, копируя табличную статистику от старого файла до недавно создаваемого файла. Например. если идентификатор пользователя владельца .frm, .MYD, или .MYI файл отличается от идентификатора пользователя процесса mysqld, OPTIMIZE TABLE генерирует, "не может изменить владение файла" ошибка, если mysqld не запускается root пользователь.