指数重建和指数重组之间有什么区别?
答案 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)
重建索引 - 为指定数据库中的表重建一个或多个索引。
重组索引 - 对指定表的聚簇索引和二级索引进行碎片整理