Когда создается btree при добавлении индекса в таблицу MySQL 5.5?
У меня довольно большая таблица в MySQL 5.5, ~200M строк, и я хочу добавить индекс к одному из столбцов в этой таблице (тип btree). Столбец имеет тип integer и содержит большое количество целых чисел.
Мой вопрос, когда вычисляется btree?
Когда я выполняю простой запрос создания индекса:
ALTER TABLE bigtable ADD INDEX (column3);
Возвращается немедленно. Вычисления btree происходят в фоновом режиме? Я не могу себе представить, что MySQL так быстро создает дерево ~ 200M с широким распределением целых чисел.
1 ответ
Краткий ответ: да.
Длинный ответ: взгляд на документацию по MySQL для ALTER_TABLE показывает следующее:
В большинстве случаев ALTER TABLE создает временную копию исходной таблицы. MySQL ожидает другие операции, которые изменяют таблицу, затем продолжается. Он включает изменение в копию, удаляет исходную таблицу и переименовывает новую. Во время выполнения ALTER TABLE исходная таблица может быть прочитана другими сеансами (за исключением, отмеченным ниже). Обновления и записи в таблицу, которые начинаются после начала операции ALTER TABLE, останавливаются до тех пор, пока новая таблица не будет готова, а затем автоматически перенаправляются в новую таблицу без каких-либо неудачных обновлений. Временная копия исходной таблицы создается в каталоге базы данных новой таблицы. Это может отличаться от каталога базы данных исходной таблицы для операций ALTER TABLE, которые переименовывают таблицу в другую базу данных.
Таким образом, когда вы создаете свой индекс, он создается для временной копии таблицы, которая затем импортируется вместо отброшенной исходной таблицы, когда она завершается.