Когда я обновляю особенно большую таблицу, время обновления истекает, поскольку таблица блокируется, а индексы перестраиваются. Есть ли способ перестроить индекс ONLINE (т. Е. Oracle), чтобы обновление не прекращалось?
optimize table перестраивает индексы онлайн
optimize table
OPTIMIZE TABLE использует оперативный DDL для обычных и многораздельных таблиц InnoDB, что сокращает время простоя при одновременных операциях DML. Перестройка таблицы, вызванная OPTIMIZE TABLE и выполненная под прикрытием ALTER TABLE ... FORCE, завершена на месте. Эксклюзивная блокировка таблицы выполняется ненадолго на этапе подготовки и на этапе фиксации операции. На этапе подготовки метаданные обновляются и создается промежуточная таблица. На этапе фиксации изменения метаданных таблицы фиксируются.
Источник: https://dev.mysql.com/doc/refman/8.0/en/optimize-table.html
Но! Я много слышал о том, что вам не следует перестраивать индексы в InnoDB, потому что они всегда актуальны. Google немного об этом.
pt-online-schema-change может использоваться для оптимизации таблицы. OPTIMIZE TABLE - это фактически noop ALTER TABLE.
OPTIMIZE TABLE
ALTER TABLE
pt-online-schema-change --alter "ENGINE=InnoDB" D=sakila,t=actor
Простой ответ: нет, нет пути.
Более сложный ответ: вы можете эмулировать добавление индексов в режиме онлайн, используя репликацию на основе операторов и сначала добавляя индекс в ведомое устройство, а затем делая его главным. Вот почему люди используют такие пакеты, как http://mysql -mmm.org / .