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 !

No comments:

Post a Comment