Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

SQL работа с большим количеством запросов

Валерий Киселёв Профи (866), закрыт 1 месяц назад
Подскажите. Есть скульная база с 3 таблицами в сумме на 40 милионов уникальных значений. Есть скрипт на питоне который генерирует новые значения. Нужно проверять нет ли в них совпадений - как лучше всего реализовать данный функционал? Вариант а - создать новые таблицы, наполнять их скриптом и раз в какое то время их сравнивать и очищать или проверять каждое созданное значение отдельно? Как будет работать быстрее если это все на 1м сервере?
Может хочет кто помочь с написанием скрипта?
Лучший ответ
Андрей Высший разум (465017) 2 месяца назад
Практически в любой современной СУБД есть возможность вставки записей с автоматической отменой добавления строк, содержащих уже существующие значения - если для поверяемого столбца создан unique-индекс (т.е. каждое значение столбца уникально).

В разных СУБД для этого используется разный синтаксис: IGNORE в MySQL, ON CONFLICT в PostgreSQL и т.д.

Впрочем, да: можно создать отдельную таблицу, залить туда новые данные, а потом единственным INSERT - SELECT выбрать из этой таблицы то, чего нет в целевой, и добавить в целевую таблицу.

И нет: проверять скриптом каждое отдельное значение бессмысленно. Это лишние затраты времени и лишняя нагрузка на базу данных.
Остальные ответы
Def Гений (64073) 2 месяца назад
Генерировать глобально уникальные идентификаторы, не проверяя на совпадения.
Валерий КиселёвПрофи (866) 2 месяца назад
Задача как раз найти совпадения - из серии есть таблица результатов хеш функции. Генерируем мусор и проверяем хеш от него на совпадение. Необходимо для практической по статистике и вероятности.
Def Гений (64073) Валерий Киселёв, тогда зависит от того, что нужно делать с этими самыми значениями и от бд. Например, если новые значения нужно добавить в одну из этих таблиц, то удостоверяемся, что на требуемое поле стоит признак UNIQUE, делаем вставку новых значений, повторяющиеся значения будут написаны в логе вставки с ошибкой "Cannot insert duplicate key". Дальше можно сделать inner join с двумя другими таблицами по очереди и удалить выведенные дубликаты
Похожие вопросы