Вопрос: Увеличивает или удаляет столбцы в таблице для восстановления всех индексов?


В частности, в MySQL (хотя я бы предположил, что то же самое будет справедливо для Oracle и Microsoft SQL Server). Если я добавлю или удалю столбец в таблицу, все ли текущие индексы (в этой таблице) должны быть созданы с нуля?

Я бы предположил, что если мы изменим размер строки таблицы (добавив / удалив столбцы), то ROWIDS изменится (некластеризованная таблица), что приведет к воссозданию всех индексов.

Если используется кластерный индекс (индексная упорядоченная таблица в Oracle), то я бы предположил, что весь кластерный индекс нужно будет воссоздать.

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


4


источник


Ответы:


Вы не сказали, какую версию MySQL и какой механизм хранения. Но я подозреваю, что ответ на ваш вопрос находится на этой странице:

http://dev.mysql.com/doc/refman/5.1/en/alter-table.html

Короткий ответ на ваш вопрос: «Да», вся таблица будет перестроена (все данные и все индексы) при добавлении или удалении столбца. Чтобы улучшить скорость, попробуйте выполнить следующее:

MyISAM: Увеличьте значение myisam_sort_buffer_size

InnoDB: Увеличить innodb_buffer_pool_size
Увеличить innodb_log_file_size

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

Источник: Я сертифицированный DBA MySQL.


2