2015-12-16 2 views
1

У меня довольно большая таблица в MySQL 5.5, ~ 200M строк, и я хочу добавить индекс в один из столбцов в этой таблице (тип btree). Столбец имеет тип integer и содержит широкое распределение целых чисел.Когда создается btree при добавлении индекса в таблицу MySQL 5.5?

Мой вопрос в том, когда вычисляется btree?

Когда я выполняю простой создать индексный запрос:

ALTER TABLE bigtable ADD INDEX (column3); 

Он возвращается немедленно. Является ли вычисление btree происходящим в фоновом режиме? Я не могу себе представить, что MySQL так быстро создает btree из значений ~ 200M с широким распределением целых чисел.

ответ

0

Короткий ответ: Да.

Длинный ответ: взгляд на MySQL Documentation для ALTER_TABLE показывает следующее:

В большинстве случаев, ALTER TABLE создает временную копию исходной таблицы. MySQL ждет других операций, которые изменяют таблицу, а затем продолжается. Он включает изменение в копию, удаляет исходную таблицу и переименовывает новую. В то время как выполняется ALTER TABLE, исходная таблица читается другими сеансами (за исключением коротких замечаний). Обновления и записи в таблицу, которые начинаются после начала операции ALTER TABLE, останавливаются до тех пор, пока новая таблица не будет готова, а затем автоматически перенаправляются в новую таблицу без каких-либо неудачных обновлений. Временная копия исходной таблицы создается в каталоге базы данных новой таблицы. Это может отличаться от каталога базы данных исходной таблицы для операций ALTER TABLE, которые переименовывают таблицу в другую базу данных.

Таким образом, при создании индекса индекс создается на временной копии таблицы, которая затем импортируется вместо исходной исходной таблицы, когда она завершается.