«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Может ли уникальный индекс удалять дубликаты в таблице с существующими дубликатами и как?

Может ли уникальный индекс удалять дубликаты в таблице с существующими дубликатами и как?

Опубликовано 8 ноября 2024 г.
Просматривать:449

Can a Unique Index Remove Duplicates in a Table with Existing Duplicates, and How?

Удаление дубликатов с помощью уникального индекса

Чтобы предотвратить вставку повторяющихся данных, для полей A, B, по ошибке был создан обычный индекс C и D, что приводит к наличию повторяющихся записей в таблице из 20 миллионов записей. Возникает вопрос: позволит ли добавление уникального индекса для этих полей удалить дубликаты без ущерба для существующих?

Исправление индекса и обработка дубликатов

Добавление уникального индекса с помощью Инструкция ALTER TABLE без модификатора IGNORE завершится ошибкой, поскольку уникальные записи уже существуют. Однако использование модификатора IGNORE приведет к удалению дубликатов.

Альтернативный подход для версий MySQL 5.7.4 и выше

Для версий MySQL 5.7.4 и выше, где Модификатор IGNORE не поддерживается, рекомендуется другой подход:

  1. Скопируйте данные во временный table.
  2. Усечь исходную таблицу.
  3. Создать уникальный индекс.
  4. Скопируйте данные обратно в исходную таблицу с помощью INSERT 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