2014-01-16 3 views
1

Что было бы самым эффективным способом предотвращения вставки повторяющихся строк в таблице SQL, которая может содержать до 500 миллионов строк?Предотвращение дублирования в большой таблице SQL Server наиболее эффективно

Я вижу два пути:

1) Создание составного первичного ключа на колоннах, которые определяют дубликат записи и перехватывать исключения DuplicateKey.

2) использовать IF NOT EXISTS(SELECT ID FROM TABLE WHERE [MyCondition]), но для этого потребуется индексировать те столбцы, которые участвуют в предложении WHERE.

ответ

2

УНИКАЛЬНЫЙ или ПЕРВЫЙ КЛЮЧ. Проверка дублирования будет сделана на вставке.

Если вы используете SSIS, найдите поиск по ключу и направьте дубликаты на стол больницы.

2
ALTER TABLE MyTable ADD CONSTRAINT UC_MyConstraintName UNIQUE (col1,col2,col3) 
0

1) быстрее, чем 2), поскольку вы просто копируете то, что SQL Server делает с машинным кодом, используя скомпилированный код sql.

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

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

Если вы не нуждаетесь в записи для сбоя сразу же в дубликате, вы можете использовать служебный брокер для выполнения повторных проверок асинхронно, это займет немного работы, но запустите here для праймера.

Смежные вопросы