30 我已经使用ALTER INDEX REBUILD删除了索引碎片。在某些情况下,REBUILD似乎并没有消除这种碎片。REBUILD无法消除碎片的原因是什么?似乎这种情况尤其发生在小索引上。 sql-server index clustered-index fragmentation — 杰拉拉 source 相关:dba.stackexchange.com/questions/5365/…– — Mark Storey-Smith
39 如果索引非常小(我相信少于8页),它将使用混合范围。因此,由于住房范围将包含来自多个索引的页面,因此似乎仍然有碎片。 因此,在这样一个很小的索引中通常可以忽略碎片的事实中,您实际上只应使用一定的页面阈值来重建索引。最佳实践是重建至少1000页的碎片索引。 — 托马斯·斯金格 source
34 对于非常大的索引也可能发生这种情况。 我在一个约有7亿行的表上有一些索引,这些索引不能在30%以下进行碎片整理。问题是数据库内部没有足够的连续可用空间来连续排列索引。 要解决不会进行碎片整理的非常大的索引,BEST解决方案是预先调整新数据库的大小并将所有对象移至该数据库,然后在该数据库中重新创建索引。 — JNK source
1 我一直在为此苦苦挣扎,就像JNK I一样,尽管问题仍然是磁盘上的可用空间和物理碎片。但是,您在SSD SAN上如何处理? 我现在发现只包含index_level = 0可能是一个好主意。这是在Ola Hallengren的脚本中完成的。 另一个改进是 REBUILD With (maxdop = 1) 这样,您可以确保最大程度的改进。 — vikjon0 source