SQL Server:追加VARBINARY性能较慢
本文关键字:性能 VARBINARY 追加 Server SQL | 更新日期: 2023-09-27 18:08:26
我正在使用64KB的迭代将文件的字节添加到SQL Server数据库的VARBINARY字段中。
然而,我认为它将整个字节对象带回到内存中,附加字节,然后更新行将导致性能下降
用于更新VARBINARY字段的SQL语句
long milliseconds = DateTime.Now.Ticks;
ExecuteSqlCommand("UPDATE dbo.table SET Item = Item + @item WHERE id = @id", new SqlParameter("@item", append), new SqlParameter("@id", id));
long millisecondsAfter = DateTime.Now.Ticks;
long timeTook = millisecondsAfter - milliseconds;
我这样说的原因是因为毫秒(TimeTook)值在每次循环后都更大。
所以问题是,有没有一种更快的方法,显然更有效的方法来做上面的查询?
——编辑(回答)——
感谢下面的答案,这是一个新的查询,工作得更好
UPDATE dbo.table SET Item.WRITE(@item, NULL, 0) WHERE id = @id", new SqlParameter("@item", append), new SqlParameter("@id", id));
谢谢
这基本上就是当人们不阅读文档时所发生的事情。
您可以直接通过SQL进行部分更新,而无需加载整个对象。
http://msdn.microsoft.com/en-us/library/ms177523%28v=sql.105%29.aspx是update语句的语法。请注意"。write"
让我引用;
。WRITE (expression,@Offset,@Length)指定"column_name"的值需要修改。表达式取代@Length从@Offset (column_name)开始的单位。只有列Varchar (max)、nvarchar(max)或varbinary(max)可以使用这一条款。column_name不能为NULL,也不能用表名或表别名。
SQL Server在这里不优化二进制追加大小写。事实上,这导致二次性能。(有人可能会说SQL Server 应该优化这个。)
使用UPDATE
语句的WRITE
子句实现流写和稳定的性能