为什么我们需要在SQL Server中重建和重新组织索引


28

搜索互联网后,我找不到原因

  1. 为什么我们需要在SQL Server中重建和重新组织索引?

  2. 当我们重建和重组时,内部会发生什么?

网站上的一篇文章说:

当索引碎片大于40%时,应重建索引。当索引碎片在10%到40%之间时,应该重新组织索引。索引重建过程使用更多的CPU,并锁定数据库资源。SQL Server开发版本和企业版具有选项“联机”,可以在重建索引时将其打开。联机选项将在重建期间保持索引可用。

我不明白这一点,尽管它说WHEN要这样做,但是我想知道WHY我们是否需要重建和重组索引?


1
这是关于为什么的问题,这是关于何时的问题
Nick Chammas 2013年

Answers:


28

当您执行插入更新和删除操作时,您的索引将在内部和外部变得零散。

内部碎片是指索引页面上的可用空间百分比很高,这意味着SQL Server在扫描索引时需要读取更多页面。

外部碎片是指索引的页面不再按顺序排列时,因此SQL Server必须做更多的工作,尤其是在IO方面要读取索引。

如果索引变得过于分散,充其量,查询效率将降低,但最糟糕的是,SQL Server将停止同时使用所有索引,这意味着几乎所有查询都必须执行表扫描或群集索引扫描。这会严重损害您的表现!

当您重新组织索引时,SQL Server会使用现有的索引页,并仅在这些年龄段上重新整理数据。这将减轻内部碎片,也可以消除少量外部碎片。与重建相比,此操作重量轻,并且始终在线。

当您重建索引时,SQL Server实际上会重新使用索引数据并使用一组新的索引页。显然,这将减轻内部和外部的碎片,但是这是一个比较繁重的操作,默认情况下会使索引脱机,尽管它可以作为联机操作执行,具体取决于您的SQL Server版本和设置。

但是,重建后不要期望碎片为0。除非您使用MAXDOP查询提示,否则SQL Server将并行执行重建操作,并且涉及的处理器越多,碎片的可能性就越大,因为每个处理器或内核将单独重建其索引的部分或索引,而无需考虑彼此。这是最佳碎片级别与重建索引所花费的时间之间的权衡。对于零碎片,请使用MAXDOP 1并在TempDB中对结果进行排序。


大...!简单地解释一下...!
DineshDB '18年

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.