搜索互联网后,我找不到原因
为什么我们需要在SQL Server中重建和重新组织索引?
当我们重建和重组时,内部会发生什么?
网站上的一篇文章说:
当索引碎片大于40%时,应重建索引。当索引碎片在10%到40%之间时,应该重新组织索引。索引重建过程使用更多的CPU,并锁定数据库资源。SQL Server开发版本和企业版具有选项“联机”,可以在重建索引时将其打开。联机选项将在重建期间保持索引可用。
我不明白这一点,尽管它说WHEN要这样做,但是我想知道WHY我们是否需要重建和重组索引?
搜索互联网后,我找不到原因
为什么我们需要在SQL Server中重建和重新组织索引?
当我们重建和重组时,内部会发生什么?
网站上的一篇文章说:
当索引碎片大于40%时,应重建索引。当索引碎片在10%到40%之间时,应该重新组织索引。索引重建过程使用更多的CPU,并锁定数据库资源。SQL Server开发版本和企业版具有选项“联机”,可以在重建索引时将其打开。联机选项将在重建期间保持索引可用。
我不明白这一点,尽管它说WHEN要这样做,但是我想知道WHY我们是否需要重建和重组索引?
Answers:
当您执行插入更新和删除操作时,您的索引将在内部和外部变得零散。
内部碎片是指索引页面上的可用空间百分比很高,这意味着SQL Server在扫描索引时需要读取更多页面。
外部碎片是指索引的页面不再按顺序排列时,因此SQL Server必须做更多的工作,尤其是在IO方面要读取索引。
如果索引变得过于分散,充其量,查询效率将降低,但最糟糕的是,SQL Server将停止同时使用所有索引,这意味着几乎所有查询都必须执行表扫描或群集索引扫描。这会严重损害您的表现!
当您重新组织索引时,SQL Server会使用现有的索引页,并仅在这些年龄段上重新整理数据。这将减轻内部碎片,也可以消除少量外部碎片。与重建相比,此操作重量轻,并且始终在线。
当您重建索引时,SQL Server实际上会重新使用索引数据并使用一组新的索引页。显然,这将减轻内部和外部的碎片,但是这是一个比较繁重的操作,默认情况下会使索引脱机,尽管它可以作为联机操作执行,具体取决于您的SQL Server版本和设置。
但是,重建后不要期望碎片为0。除非您使用MAXDOP查询提示,否则SQL Server将并行执行重建操作,并且涉及的处理器越多,碎片的可能性就越大,因为每个处理器或内核将单独重建其索引的部分或索引,而无需考虑彼此。这是最佳碎片级别与重建索引所花费的时间之间的权衡。对于零碎片,请使用MAXDOP 1并在TempDB中对结果进行排序。
为了消除导致问题的碎片,例如数据库级别的缓慢/长时间运行的查询等。
要获取有关碎片以及如何重建和重新组织索引(或重新组织索引页面)的详细信息,请参考以下链接:https : //www.idera.com/productssolutions/sqlserver/sqldefragmanager/what-is-fragmentation