После добавления gazillion комментариев к этому вопросу и его ответов у меня будет свой собственный ответ на него.
Я не ожидал бы какой-либо существенной разницы в производительности между двумя предложенными, предложенными в первоначальном вопросе. С одной стороны, как указал Рэй, второй подход может избавить вас от некоторой подготовки к вставке, но с другой стороны, СУБД обычно лучше всего работает с пакетными операторами, как в первом решении.
KM и DVK предлагают добавить ограничение UNIQUE
, которое сделает тест уникальности неявным, но потребует от вас добавить некоторую обработку ошибок вокруг вашего оператора INSERT
. Мне трудно определить, почему это должно добавить дополнительную производительность, , при условии, что у вас уже есть индекс, охватывающий два столбца . Если у вас нет такого индекса, добавьте его и пересмотрите свою потребность в большей производительности.
Независимо от того, выполняется ли проверка уникальности явно или неявно, AFAIK не имеет значения. Если что-либо получено путем проверки, выполненной «внутри» желудка СУБД, это усиление может быть просто съедено накладными расходами, связанными с ошибками создания и обработки при наличии дубликатов.
Итог: предполагая, что индекс уже создан, если вам все еще не хватает производительности, я рекомендую вам выполнить эмпирические тесты трех предложенных решений. Создайте небольшую программу, которая имитирует ожидаемые входные данные, и унесите каждое из трех решений несколькими миллиардами строк, включая вероятное количество дубликатов. Сделайте это, обязательно опубликуйте свои результаты: -)