Запрос на удаление индекса выполняется медленно
Это запрос, который я пытаюсь выполнить:
DROP INDEX id_index on table;
В прошлом я мог быстро удалять индексы, но этот запрос выполнялся почти час, прежде чем я отказался от него. Что может быть причиной этого медленного темпа?
1 ответ
SHOW CREATE TABLE - если он говорит ENGINE=MyISAM, DROP выполняется следующим образом:
- Скопируйте все данные таблицы в темп (медленно из-за большого количества операций ввода-вывода)
- Перестройте все остальные индексы (в некоторых случаях очень медленно)
- Переименовать, чтобы заменить существующую таблицу (всегда быстро)
Это может быть очень медленно, в зависимости от размера таблицы. Это из-за всего дискового ввода-вывода.
Если он говорит 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 должен занимать очень мало времени, независимо от размера таблицы / индекса.