我的数据库中有一个表CurrentStatus
(合并复制中的订阅数据库)
列是StatusID {Primary Key + Clustered Index}, StatusName, StatusDate, UserID,CreatedDate, ModifiedDate, ModifiedBy, AllowDelete,AllowUpdate
CurrentStatus表为26000行
此表上的更新和删除突然花费了太多时间,比如1分30秒甚至5分钟。
以下查询需要花费一分钟才能执行。
update StatusMaster set StatusName='OK' where StatusID = 22
表上有以前的5个索引(即使这样,查询也用于快速执行。) 现在由于更新/删除查询没有执行,我删除了所有索引,只保留了两个索引 1)StatusID上的聚簇索引 2)rowguid列上的复制索引,它是由复制自动创建的唯一非聚簇索引。
当我进行备份和恢复数据库时,同一个表上的查询运行正常。
还有一件事是我从服务器上的大约20台机器每2分钟运行一次复杂的查询。
是什么导致此查询消耗这么多时间来执行?
答案 0 :(得分:6)
我建议您通过UPDATE STATISTICS命令更新统计信息,例如:
UPDATE STATISTICS StatusMaster
答案 1 :(得分:2)
经过大量的插入,删除,更新等操作后,您的表可能会碎片化,并且您的索引可能无法优化。我建议您重新索引和更新统计信息。
当您进行备份并恢复它时,我相信您正在完成与重新索引和统计更新相同的事情。
您应该定期安排这样的维护以保持性能。
答案 2 :(得分:0)
上次当一些简单的查询花了不正常的时间[在我们的小公司]时,这是由[幸运的非生产] SQL服务器中的RAID阵列损坏引起的。