Предотвращение дублирования строк на основе столбца (MySQL)? - PullRequest
2 голосов
/ 06 ноября 2011

Я строю систему, которая часто обновляет свою локальную базу данных из других API. У меня есть Python-скрипты, заданные как задания cron, и они делают работу почти нормально.

Однако, один недостаток в том, что сценариям требуются целые годы. Когда они запускаются в первый раз, процесс выполняется быстро, но после этого требуется около 20 минут, чтобы просмотреть список из 200 000+ элементов, полученных от стороннего API.

Проблема в том, что сценарий сначала получает все строки из базы данных и добавляет их обязательное уникальное значение столбца в список. Затем, просматривая результаты API, он проверяет, существует ли в списке текущее значение must-be-unique. Это становится действительно тяжелым, так как список содержит более 200 тыс. Значений.

Есть ли способ проверить в INSERT -запросе, что на основе одного столбца нет дубликатов? Если есть, просто не добавляйте новую строку.

Любая помощь будет оценена =)

1 Ответ

5 голосов
/ 06 ноября 2011

Если вы добавите ключ UNIQUE к столбцам, которые должны содержать уникальные значения, MySQL будет жаловаться при вставке строки, которая нарушает это ограничение.

Вызатем есть три варианта:

  • INSERT IGNORE попытается вставить, и в случае нарушения ничего не делать.
  • INSERT ... ON DUPLICATE KEY UPDATE попытается вставить и, в случае нарушения, обновить строку до новых значений
  • REPLACE попытается вставить, а в случае нарушения УДАЛИТЬ существующий нарушительи вставьте новый.
...