Cha*_*tin 31

想想索引是如何实现的.它通常是某种树,如B + Tree或B-Tree.索引本身是通过查看数据中的键并构建树来创建的,因此可以有效地搜索表.

当您重新组织索引时,您将浏览现有索引,清除已删除记录的块等.当您进行删除时,这可以完成(并且在某些数据库中),但这会带来一些性能损失.相反,您可以单独执行此操作,以便或多或少地进行批处理模式.

当你重建索引,则删除现有的树和读取所有的记录,直接从数据建立一个新的树.这为您提供了一个新的,希望优化的树,它可能比重组表的结果更好; 如果它以某种方式被破坏,它还允许您重新生成树.


Qua*_*noi 8

REBUILD 锁定整个操作期间的表(如果表很大,可能是几小时和几天).

REORGANIZE 没有锁定桌子.

好.实际上,它在它现在使用的页面上放置了一些临时锁定,但是一旦操作完成就会被删除(对于任何给定的锁定,它都是几分之一秒).

如上所述@Andomar,有一个REBUILD在线索引选项,它创建新索引,当操作完成时,只需用新索引替换旧索引.

这当然意味着您应该有足够的空间来保留索引的旧副本和新副本.

REBUILD也是一个DML更改系统表,影响统计信息,启用禁用索引等的操作.

REORGANIZE 是一个纯粹的清理操作,它将所有系统状态保持原样.


Dan*_*son 3

有很多差异。基本上,重建是索引的完全重建 - 它将构建一个新索引,然后删除现有索引,而重新组织它只会简单地,嗯......它将重新组织它。

我不久前看到的这篇博客文章将比我更好地解释它。:)