Sql 检查重复项时插入到大表的性能

Sql 检查重复项时插入到大表的性能,sql,sql-server,Sql,Sql Server,我有一个简单的表,其中包含一个varchar(100)。我正试图用10亿条独特的记录来填充它。我有一个存储过程,它一次接受一个包含1000条记录的表类型参数,并将其插入表中,同时检查是否存在重复项。大约5000万之后,性能下降。我尝试对表进行分片,并使用均衡分布的sql表分区,但没有发现任何好处 如何在sql中以合理的性能构建此解决方案?您可能希望在将数据放入数据库之前尝试对其进行重复数据消除,然后在插入时禁用唯一密钥,这样您就不必在执行过程中重建数据。这是一个有趣的问题,但它是不完整的。请显示

我有一个简单的表,其中包含一个varchar(100)。我正试图用10亿条独特的记录来填充它。我有一个存储过程,它一次接受一个包含1000条记录的表类型参数,并将其插入表中,同时检查是否存在重复项。大约5000万之后,性能下降。我尝试对表进行分片,并使用均衡分布的sql表分区,但没有发现任何好处


如何在sql中以合理的性能构建此解决方案?

您可能希望在将数据放入数据库之前尝试对其进行重复数据消除,然后在插入时禁用唯一密钥,这样您就不必在执行过程中重建数据。

这是一个有趣的问题,但它是不完整的。请显示表定义及其所有索引(如果有),以及SP检查重复项的代码。您可以使用
IGNORE\u DUP\u KEY=ON
创建一个唯一的索引,然后只插入这些行,而不进行任何检查。使用TVP一次1000行的批量插入行听起来不是很理想。您可以使用批量插入API,并与@horse的建议一起直接插入到表中。将ignore_dup_key设置为on并使用批量插入API会有所帮助,但一旦达到1亿,速度仍然很慢。添加更多内存有帮助吗?我正在大批量生成新的管脚并将它们插入数据库。我不想插入重复的管脚。