Удаление дублирующего индекса в MySQL заняло довольно много времени, поэтому, пока я ждал, я искал его и нашел этот пост в 2006 году, рассказывая о том, как MySQL обрабатывает ADD
и DROP
индексирует.
Если таблица T является таблицей MySQL, имеющей четыре индекса (ndx1, ndx2, ndx3, ndx4), и вы хотите «изменить таблицу T drop index ndx3;» вот что именно происходит под капотом:
1) MySQL копирует T.MYD во временную таблицу, т. Е. S.MYD и нулевой байт S.MYI. 2) MySQL изменяет таблицу S, добавляет индекс ndx1 (...); 3) MySQL изменяет таблицу S, добавляет индекс ndx2 (...); 4) MySQL изменяет таблицу S, добавляет индекс ndx4 (...); 5) MySQL удаляет T.MYD и удаляет T.MYI 6) MySQL переименовывает S.MYD в T.MYD и переименовывает S.MYI в T.MYI
Это все еще правда? Его совет остается в силе?
Учитывая ту же таблицу MyISAM T, имеющую четыре индекса (ndx1, ndx2, ndx3, ndx4), и вы хотите «изменить таблицу T drop index ndx3;» попробуйте это вместо:
1) создать таблицу T1 наподобие T; Это создает пустую таблицу T1 с индексами ndx1, ndx2, ndx3 и ndx4. 2) изменить таблицу T1, отбросить индекс ndx3; Это опустит индекс ndx3 на пустой T1, который должен быть мгновенным. 3) вставить в Т1 выбор * из Т; Это заполнит таблицу T и загрузит все три (3) индекса для T1 за один проход. 4) стол с опущенным столом T; 5) изменить таблицу T1 переименовать в T;
Как вы все справляетесь с добавлением и удалением индексов из больших таблиц?
источник