Удаление дубликатов с помощью уникального индекса
Чтобы предотвратить вставку повторяющихся данных, для полей A, B, по ошибке был создан обычный индекс C и D, что приводит к наличию повторяющихся записей в таблице из 20 миллионов записей. Возникает вопрос: позволит ли добавление уникального индекса для этих полей удалить дубликаты без ущерба для существующих?
Исправление индекса и обработка дубликатов
Добавление уникального индекса с помощью Инструкция ALTER TABLE без модификатора IGNORE завершится ошибкой, поскольку уникальные записи уже существуют. Однако использование модификатора IGNORE приведет к удалению дубликатов.
Альтернативный подход для версий MySQL 5.7.4 и выше
Для версий MySQL 5.7.4 и выше, где Модификатор IGNORE не поддерживается, рекомендуется другой подход:
Синтаксис для удаления дубликатов с помощью INSERT ИГНОРИРОВАТЬ
CREATE TABLE tmp_data SELECT * FROM mytable;
TRUNCATE TABLE mytable;
ALTER TABLE mytable ADD UNIQUE INDEX myindex (A, B, C, D);
INSERT IGNORE INTO mytable SELECT * FROM tmp_data;
DROP TABLE tmp_data;
Дополнительные соображения
В документации не указано, какая повторяющаяся строка будет сохранена после использования модификатора IGNORE. Желательно протестировать это на меньшем наборе данных, прежде чем применять решение к большой таблице.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3