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