SQL Server:索引重建和索引重组有什么区别?

时间:2009-05-16 20:41:08

标签: sql sql-server

指数重建和指数重组之间有什么区别?

7 个答案:

答案 0 :(得分:30)

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

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

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

答案 1 :(得分:7)

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

REORGANIZE无法锁定表格。

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

正如@Andomar所指出的那样,REBUILD在线索引有一个选项,可以创建新索引,当操作完成时,只需用新索引替换旧索引。

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

REBUILD也是DML操作,它可以更改系统表,影响统计信息,启用禁用的索引等。

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

答案 2 :(得分:3)

有许多不同之处。基本上,重建是一个索引的完全重建 - 它将构建一个新的索引,然后删除现有的索引,而重组它将简单,好......它将重新组织它。

This博客文章我偶然发现它会比我更好地解释它。 :)

答案 3 :(得分:2)

重建它,删除当前索引并重新创建新索引。

重组就像把房子整理好了。

使用30%碎片来确定重建与重组是一个好习惯。

< 30%重组与> 30%重建

答案 4 :(得分:0)

“重组索引”是对B树的“叶级别”(实际上是数据页)进行清理,组织和碎片整理的过程。

重建索引正在改变整个B树,重新创建索引。

当索引碎片从10%到40%时,建议重组索引;如果索引碎片大于40%,则最好重建它。

重建索引需要更多资源,产生锁定并降低性能(如果您选择保持表在线)。所以,你需要为这个过程找到合适的时间。

答案 5 :(得分:0)

除了上面的差异(基本上重建将重新创建索引,然后“交换”现有的,而不是尝试修复现有的),一个重要的考虑因素是重建 - 甚至是企业在线重建 - 将干扰快照隔离事务。

TX1启动快照交易
TX1从T

读取

TX2在T
上重建索引 TX2重建完成

TX1再次从T读取:

  

错误3961,数据库中的快照隔离事务失败,因为自此事务启动以来,该语句访问的对象已被另一个并发事务中的DDL语句修改。由于元数据未版本化,因此不允许使用它。如果与快照隔离混合,对元数据的并发更新可能会导致不一致。

答案 6 :(得分:-1)

重建索引 - 为指定数据库中的表重建一个或多个索引。

重组索引 - 对指定表的聚簇索引和二级索引进行碎片整理