Назад | Перейти на главную страницу

Тайм-аут блокировки при создании индекса

Я пытаюсь создать новый индекс для существующей таблицы с 44 485 записями в нем.

Я использую этот запрос для создания моего нового индекса

CREATE INDEX index_name ON table_name (field_name);

Всякий раз, когда я запускаю это, я получаю эту ошибку тайм-аута:

1205 - Lock wait timeout exceeded; try restarting transaction

Это только на моей локальной машине разработчика, поэтому никакие другие процессы не занимают БД.

Есть ли предпочтительный метод добавления новых индексов в существующие таблицы?

Спасибо

Вы можете увеличить время ожидания блокировки с помощью InnoDB:

Отредактируйте /etc/my.cnf или /etc/mysql/my.cnf (при условии, что ваша машина разработчика - Linux / Unix)

Раскомментируйте (или добавьте) строку:

innodb_lock_wait_timeout = 50

И измените настройку на большее число, скажем 300. Это в секундах.

Перезапустите mysql и повторите запрос.

В качестве альтернативы вы можете выгрузить данные, отбросить таблицу, воссоздать ее с индексом и вернуть данные. Или вы можете создать новую таблицу с индексом и выбрать данные старой таблицы в новой таблице. В обоих этих случаях вы можете разбить импорт / копирование данных на более мелкие части (читай: транзакции), которые не превысят тайм-аут.