Запрос на удаление индекса выполняется медленно

Это запрос, который я пытаюсь выполнить:

DROP INDEX id_index on table;

В прошлом я мог быстро удалять индексы, но этот запрос выполнялся почти час, прежде чем я отказался от него. Что может быть причиной этого медленного темпа?

1 ответ

SHOW CREATE TABLE - если он говорит ENGINE=MyISAM, DROP выполняется следующим образом:

  1. Скопируйте все данные таблицы в темп (медленно из-за большого количества операций ввода-вывода)
  2. Перестройте все остальные индексы (в некоторых случаях очень медленно)
  3. Переименовать, чтобы заменить существующую таблицу (всегда быстро)

Это может быть очень медленно, в зависимости от размера таблицы. Это из-за всего дискового ввода-вывода.

Если он говорит ENGINE=InnoDB, все может быть лучше. Но все равно имеет значение, удаляете ли вы ПЕРВИЧНЫЙ КЛЮЧ или нет. И, возможно, участвует ли KEY в ограничении FOREIGN KEY. Я предполагаю, что old_alter_table установлен в OFF.

http://dev.mysql.com/doc/refman/5.6/en/alter-table.html содержит много деталей. То, что вам нужно было сказать, было ALGORITHM=INPLACE. Вы, вероятно, получили ALGORITHM=DEFAULT, и я не вижу в документе, что по умолчанию.

ALGORITHM = COPY действует так, как я упоминал выше для MyISAM.

ALGORITHM = INPLACE должен занимать очень мало времени, независимо от размера таблицы / индекса.

Другие вопросы по тегам