SQL Server:追加VARBINARY性能缓慢

时间:2014-06-13 14:42:33

标签: c# sql sql-server entity-framework

我使用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));

由于

2 个答案:

答案 0 :(得分:3)

这基本上是人们不阅读文档时会发生的事情。

您可以直接通过SQL进行部分更新,而无需加载整个对象。

http://msdn.microsoft.com/en-us/library/ms177523%28v=sql.105%29.aspx

是update语句的语法。请注意" .Write"。

让我引用;

  

.WRITE(表达式,@ Offset,@ Length)指定的一部分   要修改column_name的值。表达式取代了@Length   从column_name的@Offset开始的单位。只有列   可以使用指定varchar(max),nvarchar(max)或varbinary(max)   这个条款。 column_name不能为NULL,不能用a限定   表名或表别名。

答案 1 :(得分:2)

SQL Server不会在此处优化二进制附加案例。实际上,这会导致二次性能。 (有人可能会说SQL Server 应该优化它。)

使用WRITE clause of the UPDATE语句实现流式写入和稳定的性能。