我是一个新手,无论是在堆栈溢出还是在sql server上,所以如果这个问题不合适,请告诉我:)
好吧,我正在开发一个用于分析大量数据的Web应用程序,这些数据存储在SQL Server 2008数据库中。该接口不允许用户更新或插入任何数据,因此除了用户数据的某些更新外,主要的SELECT命令将被发送到数据库。
每晚,系统将关闭并刷新其他来源的信息。此刷新还将涉及大量数据,因此数据库将在此阶段主要执行INSERT和UPDATE命令。
我已经创建了适当的索引以在SELECTS上实现良好的性能,但是这些索引会导致夜间刷新变慢。我想要“两个世界中最好的”,所以我搜索了一下,发现一个常见的策略是在写入数据之前删除/禁用所有索引,然后再重新创建它们。我还听说过更好的方法是限制索引的fillfactor,这样可以避免编写用于删除和重新创建索引的脚本。
您认为在这里使用的最佳方法是什么?我的主要目标是良好的表现?我应该使用“fillfactor”-approach还是应该弄脏并编写用于删除/重新创建索引的脚本?欢迎任何建议!
答案 0 :(得分:2)
每晚删除/重新创建索引会有所帮助。填充因子只会在插入/更新级别导致碎片时提供好处。您可以通过运行DBCC SHOWCONTIG
来检查这一点(小心生产,如果DB很大)。
答案 1 :(得分:0)
另一个应该提高性能的选择是在“系统刷新”期间将数据库的恢复模型从完全切换到简单。然后换回来。
切换回完全后应该进行完整备份,但这可能是值得的,最好是针对工作负载进行尝试。见。