更新语句运行时间过长与否

时间:2010-08-19 16:17:27

标签: sql sql-server sql-server-2008

我刚开始使用这么多数据(2000万行)而且我不知道在查询持续时间方面我应该期待什么:

update table set field = '1234'  

字段上没有索引。这个声明花了25分钟。数据库设置为“简单恢复”。 25分钟似乎太长了吗?表有9列,小数据类型<50 varchar。

3 个答案:

答案 0 :(得分:12)

如果您在一次交易中更新了20M行,那么您的时间完全由您的IO子系统驱动:您拥有什么样的驱动器,什么是磁盘文件布局等。如果您在具有4个平衡文件的raid 10中有40个轴一个单独的类似电池的日志然后结果令人担忧地缓慢。如果您使用单个MDF在单个消费者质量5000rpm HDD上与LDF共享主轴进行测试,那么您的时间会非常快。

答案 1 :(得分:2)

您正在以大约1500秒的速度更新20条Mio记录,平均每秒更新7000次。听起来不错。

答案 2 :(得分:1)

  • 是否有引用该字段的索引视图?
  • 该字段是否以(事务性)复制方案发布?
  • 是否有其他会话在更新运行的同时访问该表?
  • 日志和数据文件是否存储在不同的磁盘上(物理上,而不是同一硬件的两个不同分区)?
  • 是否存在引用该字段的检查约束?
  • 该表上是否有任何触发器?

所有这些以及可能的许多其他因素都会影响数据修改性能。

否则,请尝试使用TOPWHERE子句对更新进行批处理,该子句仅查找未修改的行。