Добавление ключа UNIQUE в большую существующую таблицу MySQL, которая получает INSERT / DELETE - PullRequest
0 голосов
/ 11 июля 2019

У меня очень большая таблица (десятки миллионов строк), и к столбцу этой таблицы необходимо добавить УНИКАЛЬНЫЙ индекс.Я точно знаю, что таблица содержит дублированные значения в этом ключе, которые мне нужно очистить (удаляя строки / сбрасывая значение столбца до чего-то уникального, которое я могу автоматически сгенерировать).Плюсом является то, что строки, которые уже дублированы, больше не изменяются.

Каков будет правильный подход для выполнения таких изменений, учитывая, что я, вероятно, буду использовать инструмент Percona pt-osc и тамтакое непрерывное удаление / вставка в таблицу?Мой план был:

  • Добавить код, который гарантирует, что идентификаторы дубликатов больше не будут вставлены.Возможно, мне нужно временно добавить для этого отдельную таблицу, поскольку я хочу, чтобы база данных обеспечивала это для меня, а не для приложения, поэтому вставьте в «теневую таблицу» уникальный индекс в транзакции вместе с моей основной таблицей, откатите всевставки, которые пытаются вставить повторяющиеся значения
  • Заново заполнить таблицу, задав все недопустимые значения столбцов, которые находятся в диапазоне первичного ключа ниже $current_pkey_value
  • Затем добавьте индекс и используйте pt-osc для переключениястол

Что-то мне не хватает?

...