我有一个Web应用程序,每秒接收大约50次点击,每次点击我都会在中央SQL Server数据库中记录大约10条记录。大约每3秒钟就会出现一次入站连接5000多行。
目前我有一个存储过程,它将XML作为参数。我从我的XML执行INSERT到我的主表,其中行字段不匹配,然后用我的XML中的值更新整个表。
无论如何操作都不慢,但我真的想知道最好的方法。我在SQL Server 2005上运行,因此我没有MERGE操作。
答案 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分解为临时表吗?