防止在可能包含多达5亿行的SQL表中插入重复行的最有效方法是什么?
我看到两种方式:
1)在定义重复记录的列上创建复合主键,并捕获DuplicateKey异常。
2)使用IF NOT EXISTS(SELECT ID FROM TABLE WHERE [MyCondition])
,但这需要索引那些参与WHERE
子句的列。
答案 0 :(得分:2)
ALTER TABLE MyTable ADD CONSTRAINT UC_MyConstraintName UNIQUE (col1,col2,col3)
答案 1 :(得分:2)
UNIQUE或PRIMARY KEY。复制检查将在插入上完成。
如果您正在使用SSIS,请在密钥上匹配查找并将重复项指向医院餐桌。
答案 2 :(得分:0)
1)比2)更快,因为你只是使用编译的sql代码复制SQL Server对机器代码所做的事情。
对于开箱即用的东西:如果插入性能比立即正确性更重要,那么首先忽略重复...
您可以标记或单独记录未检查的行并运行计划任务以返回并重新检查它们。对于非常慢的读取选项,或者重复项不是太大的问题,这可能没问题。
如果您不需要写入立即失败,您可以使用服务代理异步执行重复检查,这将需要一些工作,但启动here以获取引物。