Friday, August 28, 2009

Чистим дубликаты в таблице MySQL

Оптимизируя таблицы в довольно большой базе обнаружил что в одном месте небыло уникального индекса. Т.е. требовалось чтобы 2 поля вместе были уникальные. Добавляется он просто:
ALTER TABLE tablename ADD UNIQUE (`first_id`, `second_id`);

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

Гугл подсказал много разных решений. В основном они сводились к 2 решениям

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

  • писанине скрипта который все поправит


Я уже было и начал писать скрипт который все это поправил бы но вдруг нашел оптимальное решение:
ALTER IGNORE TABLE tablename ADD UNIQUE (`shared_feed_id`, `post_id`);

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

Happy coding !

0 comments:

Post a Comment