重建-聚集索引,表或两者?


9

我在任何地方都找不到确切的资源,因此希望一位专家可以在这里给我答案。

我有一个很大的表,我们必须在其中添加一列。聚集索引非常分散,我想做一个ALTER INDEX REBUILD清理它。

我通常ALTER TABLE REBUILD在更改列时也会执行一次,因为这会清除该操作中的所有指针或拆分。

因为我们在谈论聚集索引,本质上就是表,我是否需要同时做这两个事情?

我怀疑ALTER INDEX REBUILD集群中的不会更新遗嘱的所有内容ALTER TABLE,但是我也担心ALTER TABLE不会清理索引碎片。


IIRC重建不会更新列统计信息。值得怀疑的是,无论哪种情况都不会发生。:-)
亚伦·伯特兰

Answers:


6

如果您重建聚集索引,则无需重建表。如果表是堆(没有聚簇索引),那么您可能要重建它。


之前我读过,删除列时,您需要做一个,ALTER TABLE REBUILD因为这将修复在索引重建中未固定的指针。不再是这种情况了吗?
JNK 2012年

什么指针?我从未听说过。删除列没有任何指针,除非你是在谈论TEXT,NTEXT,在SQL IMAGE数据类型2000
mrdenny

1
我认为当时我的担心是没有根据的……
JNK 2012年

@JNK:我怀疑你的意思是DBCC CLEANTABLE时droppimg列是相同的重建聚集索引stackoverflow.com/a/808368/27535dba.stackexchange.com/search?q=%2BDBCC+%2BCLEANTABLE
GBN

0

重建删除并重新创建索引。创建聚簇索引时,除了创建CIX(不包含CIX的表是堆)之外,它还会对表的行进行重新排序


4
重建不会删除并重新创建聚簇索引。删除聚簇索引会将表变成堆。如果重建将“删除并重建”,则必须处于中间状态,其中表是堆,这是不正确的。如果您不相信我没有中间堆阶段,请考虑如果实现了这种中间堆状态,则“重新创建”将需要某种排序,但是快速查看一下重建执行计划就会发现没有排序。
Remus Rusanu'4

最好的问候RR,我喜欢阅读您的文章,但不确定您为什么会提出这一点。我已经链接了官方的MSDN。在大约一半位置的“重建索引”部分,第一个语句:“重建索引将删除并重新创建索引。” 该声明没有任何歧义。再次出现:msdn.microsoft.com/en-us/library/ms188388.aspx
Eric Higgins'4

1
BOL和MSDN可能会时不时地选择措辞,然后又一次又一次地选择……这就是这种情况。
Remus Rusanu 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.