SQL Server中的REBUILD ONLINE和REORGANIZE索引有什么区别?
答案 0 :(得分:4)
索引中的叶级数据很容易碎片化,具体取决于插入的性质以及SQL Server在插入,更新(或删除期间删除)期间将数据放在磁盘上的位置。它并不总是能够在特定的物理插槽中放置特定值,而这种碎片会对搜索/扫描操作产生严重影响。
重新组织尝试将索引的叶级别按逻辑顺序放回已分配给索引的页面中。
重建基本上创建了一个全新的索引副本,并且在减少碎片方面更有效 - 但这在时间和磁盘空间方面都要付出代价。您可能需要数据库中的可用空间,从现有索引大小的1.2倍到1.5倍,以执行重建。这类似于CREATE INDEX ... WITH DROP_EXISTING
。
在线重建意味着在创建新索引时,旧索引仍可供其他用户查询。并非所有版本都提供此功能(仅限Enterprise +)。
使用哪种方法之间的选择取决于表的大小,碎片的级别,减少碎片的潜在好处以及磁盘上的可用空间(如果您使用的是另外决定在线使用)某些版本)。 Ola Hallengren和Michelle Ufford拥有非常强大的解决方案,可以帮助您做出这些决定:
http://sqlfool.com/2011/06/index-defrag-script-v4-1/
关于重组的一个好处是,如果它花了太长时间你可以取消它,你就不会失去它已经完成的任何工作。如果取消重建,它将回滚它所做的一切。