T-SQL连接大字符串时性能不佳

时间:2017-02-06 20:32:21

标签: sql sql-server tsql

我的C#应用​​程序调用包含以下UPDATE语句的存储过程,以将VARCHAR(max)列与作为参数传入的字符串@input连接起来:

UPDATE [TblTest] 
SET [txtData] = [txtData] + @input
WHERE [TblTestID] = @id

@input通常会有一百万个字符的长度。

多次调用存储过程。随着txtData列中存储的字符串长度的增加,UPDATE语句的性能会显着下降。例如。当txtData有超过3亿个字符时,执行时间超过30秒,表中只有一条记录。

是否有任何选项可用于优化SQL以提高性能?我使用的是SQL Server 2008 R2。

感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

您可以尝试将browser.span(css: "._Xbe.kno-fv")UPDATEdocs)一起使用。

根据this source,这是更新大型列的快速方法:

  

记录传统的UPDATE语句使用.WRITE子句   最少记录(更快)

     

如果@Offset为NULL,则更新操作会在结尾处附加表达式   专栏。

在你的情况下,试试这个:

.WRITE (expression,@Offset,@Length)

答案 1 :(得分:3)

您遇到了性能问题,因此请开始对其进行调查。阅读并关注How to analyse SQL Server performance

您的问题可能来自with<state_tag>(std::ref(my_parser))[destination_rule]上缺少的索引,可能是由日志或数据库增长%因素阻塞引起的,可能是您的客户端代码随着内存增长而减慢并且传入的参数越来越慢,可能是因为没有使用WRITE语法来更新BLOB([TblTestId])等等。只有通过测量,您才能找到原因。