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