一尘不染

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

sql-server

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

  1. 为什么我们需要在 SQL Server 中重建和重组索引?
  2. 当我们重建和重组时,内部会发生什么?

一篇文章说:

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

我无法理解这一点,虽然它说WHEN要这样做,但我想知道WHY我们是否需要重建和重组索引?


阅读 85

收藏
2022-11-10

共1个答案

一尘不染

当您执行插入更新和删除时,您的索引将在内部和外部变得碎片化。

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

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

如果您的索引变得过于碎片化,充其量,您的查询效率会降低,但最坏的情况是,SQL Server 将停止使用所有索引,这意味着几乎所有查询都必须执行表扫描或聚集索引扫描。这会对你的表现造成很大的影响!

当您重新组织索引时,SQL Server 会使用现有的索引页面,并且只是在这些年龄上随机排列数据。这将减轻内部碎片,也可以去除少量的外部碎片。这是比重建更轻的操作,并且始终在线。

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

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

2022-11-10