-1 sql-server statistics index-maintenance
我的 SQL Server 版本是 2014。
该表有超过 2100 万行。它的索引之一是在被大量引用的整数字段上的非聚集索引。
我做了一个影响大约 20% 行的大规模更新。它更新了该字段的值。从那以后,查询变得非常慢,所以我执行了:
ALTER INDEX ALL ON the_table REORGANIZE;
Run Code Online (Sandbox Code Playgroud)
即使avg_fragmentation_in_percent从 30-90% 下降到 1% 以下,这也没有奏效。
作为最后的手段,我删除了令人不安的索引并重新创建了它。现在是即时的。那么,ALTER INDEX除了看似更好的平均碎片百分比之外,还有什么好处呢?
在重新组织索引之前,我没有更新统计信息。
REORGANIZE比重新创建索引要少得多。它不会更改每个页面上的数据或更新统计信息,它只是重新排列页面的存储位置。
您正在寻找的是REBUILD,这与删除和重新创建索引的作用相同,除了索引永远不会真正消失的事实(在重建期间使用旧索引,只有在新索引被删除时才会删除)准备替换它),因此如果您执行ONLINE重建,您的应用程序可以继续使用索引(无需给出ONLINE指令,该表将在重建期间被锁定)。它将重新排列页面上的数据(删除内部空间碎片而不仅仅是页面之间的碎片)并重新计算统计信息。
您可能不需要完整索引重建的繁重工作:对于您描述的情况,只需重新计算统计信息就足够了。
要考虑的另一件事是您的ALTER ALL语句还将重建表的聚集索引(如果有),这可能会产生重大影响,具体取决于正在运行的查询。
| 归档时间: |
|
| 查看次数: |
36 次 |
| 最近记录: |