当您执行插入更新和删除操作时,您的索引将在内部和外部变得零散。
内部碎片是指索引页面上的可用空间百分比很高,这意味着SQL Server在扫描索引时需要读取更多页面。
外部碎片是指索引的页面不再按顺序排列时,因此SQL Server必须做更多的工作,尤其是在IO方面要读取索引。
如果索引变得过于分散,充其量,查询效率将降低,但最糟糕的是,SQL Server将停止同时使用所有索引,这意味着几乎所有查询都必须执行表扫描或群集索引扫描。这会严重损害您的表现!
当您重新组织索引时,SQL Server会使用现有的索引页,并仅在这些年龄段上重新整理数据。这将减轻内部碎片,也可以消除少量外部碎片。与重建相比,此操作重量轻,并且始终在线。
当您重建索引时,SQL Server实际上会重新使用索引数据并使用一组新的索引页。显然,这将减轻内部和外部的碎片,但是这是一个比较繁重的操作,默认情况下会使索引脱机,尽管它可以作为联机操作执行,具体取决于您的SQL Server版本和设置。
但是,重建后不要期望碎片为0。除非您使用MAXDOP查询提示,否则SQL Server将并行执行重建操作,并且涉及的处理器越多,碎片的可能性就越大,因为每个处理器或内核将单独重建其索引的部分或索引,而无需考虑彼此。这是最佳碎片级别与重建索引所花费的时间之间的权衡。对于零碎片,请使用MAXDOP 1并在TempDB中对结果进行排序。