这里有点远,但我在下面有一个简单的查询:
begin transaction
update s
set s.SomeField = null
from someTable s (NOLOCK)
rollback transaction
这在约30秒内运行,靠近SQL Server框。我可以使用任何技巧来提高速度。该表中有144,306行。
感谢。
答案 0 :(得分:2)
像这样的大型UPDATE命令性能的最大组成部分将是数据库日志的速度。
为获得最佳表现:
将SSD用于数据驱动器也可能有所帮助,因为该命令将创建大量脏缓冲区,稍后由懒惰写入器刷新到磁盘;这可能会使DB上的其他操作在发生时变慢。
答案 1 :(得分:1)
如果没有约束,并且你真的需要将该列的所有值都设置为NULL,那么我会测试删除列并重新添加它。
不确定这是否会更快,但我会调查它。
答案 2 :(得分:1)
答案 3 :(得分:1)
您可以稍微更改查询的语法,但我的测试没有区别。我使用的是STATISTICS IO
和STATISTICS TIME
。
您提到该列已编入索引。您可以在事务中禁用它/重新启用它。 t-sql很简单,请参阅 - http://blog.sqlauthority.com/2007/05/17/sql-server-disable-index-enable-index-alter-index/
我过去必须为类似的工作做这件事,而且对我来说效果很好。
答案 4 :(得分:0)
尝试像这样实施
Disable Index
Drop the column
Create the column
Rebuild index
我猜它会提高性能。