Как создать уникальный индекс при том, что в таблице есть дубликаты

Естественно, база MySQL не позволит создать уникальный индекс, если у вас уже есть дубликаты в таблице. Первое, что приходит на ум — это сначала удалить каким-то образом дублированные записи, а потом уже создать новый уникальный индекс. Но все становится еще сложнее, если уникальный индекс состоит из нескольких полей. Удаление записей из большой таблицы может занять огромное время. Оказывается есть очень простое решение, о котором я сначала и не знал.

Вот обычный запрос на добавление составного уникального индекса, который будет ругаться, если в таблице уже имеются дубликаты:

ALTER TABLE `table_name` ADD UNIQUE INDEX `my_unique_index` (`field1`, `field2`);

А вот и киллер фича. Такой же запрос, только он мало того, что быстро создаст индекс, к тому же сам уберет из таблицы дубликаты:

 ALTER IGNORE TABLE `table_name` ADD UNIQUE INDEX `my_unique_index` (`field1`, `field2`);

 Не благодарите. ;)



Нет комментариев

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Комментарий: