提高5000+;SQL Server中没有合并的行?
我有一个web应用程序,每秒收到大约50次点击,每次点击我都会在中央SQL Server数据库中插入大约10条记录。大约每3秒钟,我会为一个入站连接增加5000多行 目前我有一个以XML为参数的存储过程。我从XML中插入一个行字段不匹配的主表,然后用XML中的值更新整个表提高5000+;SQL Server中没有合并的行?,sql,sql-server,sql-server-2005,merge,upsert,Sql,Sql Server,Sql Server 2005,Merge,Upsert,我有一个web应用程序,每秒收到大约50次点击,每次点击我都会在中央SQL Server数据库中插入大约10条记录。大约每3秒钟,我会为一个入站连接增加5000多行 目前我有一个以XML为参数的存储过程。我从XML中插入一个行字段不匹配的主表,然后用XML中的值更新整个表 手术一点也不慢,但我真的很想知道最好的方法。我正在SQL Server 2005上运行,因此没有合并操作。我将首先执行更新,否则您将更新刚刚插入的行 SELECT .. INTO #temp FROM (shredXML)
手术一点也不慢,但我真的很想知道最好的方法。我正在SQL Server 2005上运行,因此没有合并操作。我将首先执行更新,否则您将更新刚刚插入的行
SELECT .. INTO #temp FROM (shredXML)
BEGIN TRAN
UPDATE ... FROM WHERE (matches using #temp)
INSERT ... SELECT ... FROM #temp WHERE NOT EXISTS
COMMIT
我还将考虑将XML更改为临时表并使用Sql BulkCopy.我们发现,这比解析XML(通常超过几百行)更有效。如果你不能改变这一点,那么你会先将XML分解到临时表中吗?
@Dalex:这不太一样,只适用于一行,不适用于5k行。我目前不“制表”XML。SqlBulkCopy将是从C#到SQL的一个选项,但是5000行几乎是我们期望在单个操作中运行的限制。有了5000条记录,我认为您将感受到使用SqlBulkCopy的好处。到目前为止,你在什么时候能完成5000排的上升,还有什么会太慢呢?@richbayliss;无论您实现了多少图形查询计划,分解XML一次都将是一个“快速的胜利”,这将显示将XML分解(甚至一次)到临时表中是存储过程调用中比插入调用最昂贵的部分/update@richbayliss:使用许多并发的5k行插入(对于许多客户端),然后每一个小帮助。您需要提高总体吞吐量并减少XML分解开销(如果在客户机中转换为XML,这将是双倍的开销)。50亿行比许多并发的5k行问题要小inserts@gbn:使用上述技术-预SqlBulkCopy-我看到更新/插入6500行需要6秒。这很好。我将用SqlBulkCopy报告,然后结束问题。你帮了大忙。