Когда создается btree при добавлении индекса в таблицу MySQL 5.5?

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

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

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

ALTER TABLE bigtable ADD INDEX (column3);

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


person Niklas9    schedule 16.12.2015    source источник


Ответы (1)


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

Длинный ответ: посмотрите документацию MySQL для ALTER_TABLE. показывает следующее:

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

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

person Ieuan Stanley    schedule 16.12.2015