Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
提高5000+;SQL Server中没有合并的行?_Sql_Sql Server_Sql Server 2005_Merge_Upsert - Fatal编程技术网

提高5000+;SQL Server中没有合并的行?

提高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)

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

目前我有一个以XML为参数的存储过程。我从XML中插入一个行字段不匹配的主表,然后用XML中的值更新整个表


手术一点也不慢,但我真的很想知道最好的方法。我正在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报告,然后结束问题。你帮了大忙。