我们有一个非常慢的数据库(MS SQL SERVER)。现在我们发现,索引从未重建或重组过。(目前尚不清楚这是否真的是问题所在,但我们现在想经常这样做。)
但现在的问题是:重建索引好还是重新组织索引好?目前我们的碎片率超过 90%,所以我进行了重建。但如果我想经常这样做,碎片率通常会较低。那么重新组织索引而不是重建是否更有意义?你真的会在每个 MS SQL Server 上毫无例外地频繁执行此任务吗?在所有 MS SQL 服务器上这样做是否有意义?
有没有建议这个任务应该多久运行一次?一周一次?每月一次?
我还在博客中看到,重建/重组后他们还会进行“更新统计”。这是推荐的做法还是无稽之谈?(我在博客上找到了这两种做法。-> 一个说:是的,那就这样做 -> 另一个说:无稽之谈!)
您的经验是什么?这些任务(重建/重组/统计)是否占用大量性能?
问题太多!抱歉!
答案1
有大量信息可以回答这些问题。答案是:视情况而定。定期维护索引和更新统计数据至关重要,这一点是肯定的。不过,您必须根据您的环境进行一些研究,并根据情况调整如何以及何时进行维护。
作为良好的开始,请阅读以下内容:
- 重建或重组:SQL Server索引维护(肯德拉·利特尔)
- 更新统计:IO 爆炸的秘密(肯德拉·利特尔)
- 指数维护(乔纳森·凯哈亚斯)
- 是什么导致该计划出现严重错误 - 您应该更新统计数据吗(金伯利·特里普)
- 了解统计信息何时自动更新(艾琳·斯特拉托)
答案2
正如 Squillman 所说,但你也可能想考虑使用类似Ola Hallengren 的剧本,它只做必要的工作。您可以在重建或重组索引之前自定义索引中的碎片量,这可以减少重新索引所涉及的工作量。
但确实如此。这取决于您的环境、负载类型(主要是选择、主要是插入/更新/删除)等。