修复SQL Server中的索引碎片

时间:2011-06-10 12:34:06

标签: sql-server-2005 sql-server-2008

以下是索引表的碎片状态:

enter image description here

这是我的PageDefinition表:

enter image description here

任何建议我可以对此做出哪些可能的改变以降低碎片。我这是第一次这样做,所以理性的解决方案将非常有帮助。如果我需要在这里添加更多细节,请告诉我。

感谢名单

2 个答案:

答案 0 :(得分:1)

碎片化的主要原因是pagesplits。插入新记录或更新现有记录可能会导致页面中分配数据的方式发生变化

好的演讲 - http://devconnections.com/updates/LasVegas_Fall10/SQL/Randal-SQL-SDB306-Fragmentation.pdf

http://blog.sqlauthority.com/2008/03/27/sql-server-2005-find-index-fragmentation-details-slow-index-performance/

您可以根据表格上的更新/插入提供fillfactor。示例 - 如果表是只读的,并且不会进行更新,则可以提供100%填充因子。这将提供分配,以便您的插入/更新不会导致分解。

70%您可以配置为试用。重建索引是解决此问题的另一种方法。

答案 1 :(得分:1)

Kimberly Tripp - 索引女王 - 有很多关于如何选择良好群集密钥的博客文章(在SQL Server中,主键是 - 默认情况下 - 您的群集密钥。)

检查出来,阅读它们,了解它们 - 服从它们! : - )

基本上,只需阅读她的整个博客 - 关于索引,聚集索引等的所有内容。

您的群集密钥(因此默认情况下 - 您的主键)应为:

  • 狭窄 - 4字节INT很棒,超过16字节(GUID)的任何东西都是浪费大量空间
  • 独特 - 阅读她的博客文章
  • 静态 - 永不改变(如果可能)
  • 不断增加(通常为INT IDENTITY)以避免导致大部分碎片的网页拆分