【发布时间】:2011-12-06 17:29:03
【问题描述】:
这里有点长镜头,但我在下面有一个简单的查询:
begin transaction
update s
set s.SomeField = null
from someTable s (NOLOCK)
rollback transaction
在靠近 SQL Server 框的地方运行大约 30 秒。有什么技巧可以用来提高速度。该表有 144,306 行。
谢谢。
【问题讨论】:
-
SomeField是索引的一部分吗?如果不回滚会发生什么?回滚占用了大部分时间,还是归零? -
是的,它是索引的一部分。回滚增加了大约 10 秒的时间。还是 20 秒似乎太多了。
-
from someTable s (NOLOCK)完全没有意义。它不会减少锁定量,只需使用update someTable set SomeField = null -
如果这是常规操作,您将不得不查看您的架构或付出代价。涉及的每个索引 + 表,并且可能索引也会阻塞..
-
@Tony - 仅当系统上没有用户时才会这样做。
标签: sql performance sql-server-2008