在SQL Server中没有合并时插入5000多行的最有效/最佳实践是什么?

时间:2011-05-17 12:55:42

标签: sql sql-server sql-server-2005 merge upsert

我有一个Web应用程序,每秒接收大约50次点击,每次点击我都会在中央SQL Server数据库中记录大约10条记录。大约每3秒钟就会出现一次入站连接5000多行。

目前我有一个存储过程,它将XML作为参数。我从我的XML执行INSERT到我的主表,其中行字段不匹配,然后用我的XML中的值更新整个表。

无论如何操作都不慢,但我真的想知道最好的方法。我在SQL Server 2005上运行,因此我没有MERGE操作。

1 个答案:

答案 0 :(得分:6)

我会先进行UPDATE,否则你将更新刚刚插入的行

SELECT .. INTO #temp FROM (shredXML)

BEGIN TRAN

UPDATE ... FROM WHERE (matches using #temp)

INSERT ... SELECT ... FROM #temp WHERE NOT EXISTS

COMMIT

我还考虑将XML更改为临时表并使用SQLBulkCopy。我们发现这比通常解析XML超过几百行更有效。如果你不能改变这个,那么你首先将XML分解为临时表吗?