我正在处理应用程序的 SQL Server 数据库中的问题。此应用程序用于医疗保健,我只维护数据库,我不创建应用程序。
一段时间后,客户面临着他们的表上转发记录的问题。我创建了一个存储过程,通过创建聚集索引并再次删除它来修复这些转发的记录,有效地重新组织表并修复转发的记录。
我当前脚本的工作方式如下:
#Forwarded_Records用来自sys.dm_db_index_physical_stats、sys.indexes和 的信息填充表 ( )
sys.columns。这将用包含转发记录和有关其索引的信息(包括离线/在线可用性)的表填充该表。
一旦表被填满,存储过程将检查窗口中是否还有时间做其他工作。如果有,它将从 forwarded_records 表中的第一条记录开始,并开始创建/删除聚集索引。
一旦修复了所有记录,它将开始重新填充 forwarded_records 表并搜索包含转发记录的新表。这将再次开始循环。
我面临以下问题:
现在我的问题是什么?
我怎样才能改进这个过程,使它更有效。目前它在第一个周期非常有效并且修复了所有转发的记录。但是从第二个周期开始,它只会花更多的时间在“查找”转发记录上而不是修复它们(找到它们需要 45 分钟,而修复它们只需要 2 分钟)。
我的情况有没有更好的方法?我应该每天花 45 分钟来理所当然地找到它们,还是我最好做所有表而不是搜索实际需要修复的表。
感谢您的帮助。
(StackExchange 上的第一篇文章,尽量保持建设性。如果这个问题需要编辑,请帮忙)