改变指数重组会导致过时的统计数据吗?

时间:2015-12-17 22:08:41

标签: sql-server indexing statistics maintenance

我已阅读多篇文章并了解基于BOL的重新组织不会更新统计信息,因为数据分发不会更改。我们过去常常每天晚上进行一次索引重建,直到它变得太慢并且有时会转移到索引重建,有时甚至是索引重组(我称之为智能重新索引)。变化后6个月突然间,我接到一个电话,说你的查询有问题......经过数小时的分析,我终于发现问题是由于过时的统计数据。之前从未遇到过这个问题,因为索引的重建等同于使用Fullscan进行统计更新。

我的理论,如果我错了,请纠正我,如果运行智能重新索引(基于最佳实践=在30%碎片重建时重建,在5%到30%之间重建时),每晚一次,可能会在第一次左右重建索引,然后永远重建,因为夜间进程会在Reorg上捕获它并且永远不会有机会重建....因此永远不会更新统计数据?

所以,如果我有一个包含1000万行的表,那么在更新统计数据启动之前,我将不得不等到200万行被修改,并且索引永远不会被重建?!?!?

我是正确还是离开?

1 个答案:

答案 0 :(得分:0)

重组并不是导致过时的统计数据,而是你曾经做过的重建工作一直保持新鲜。

在"病理"例如,重组移动只有一页不合适。阅读一页并不足以获得准确的直方图,因此SQL不会免费为您提供统计数据更新。

与重建相比较。由于它必须读取(和写入)每个页面,SQL开发人员说"哦,嘿......还可以更新免费统计数据!"。

最后,你不需要依靠自动更新机制来启动;您可以发出手动update statistics声明。虽然我在这里,但我也许赞同Old Hallengren写的免费脚本。随附的索引维护过程也将进行统计维护。我使用它的运气相当不错。