数据库索引 - 维护作业

Rob*_*own 5 index sql-server best-practices optimization maintenance

我创建了一个每晚运行的脚本,以根据碎片重建和重新组织索引,重建碎片 > 30% 的索引,重新组织碎片 10% - 30% 的索引。

运行脚本后,我注意到我们有大约 400 个索引仍然反映了 > 10% 的碎片计数,经过更多调查,我发现一些帖子提到页数 < 1000 的任何索引都不会被 SQL 重新组织.

我进一步调查了为什么我的脚本没有更新我的所有索引并发现查询的结果

sys.dm_db_index_physical_stats(DB_ID(DB_NAME()),NULL,NULL,NULL, 'DETAILED')
Run Code Online (Sandbox Code Playgroud)

对于具有 > 1 条记录的表,显示页数为 5、6,record_count 列有大约 16 000 条记录,然后我通过运行强制在索引上重建索引

ALTER INDEX [indexname] ON [schema].[table] REBUILD WITH (FILLFACTOR = 85, STATISTICS_NORECOMPUTE = OFF)
Run Code Online (Sandbox Code Playgroud)

我的索引现在显示 1 磨机 + 记录计数。

我的问题是:为什么重新组织他的索引不会纠正索引中的记录计数和碎片以及首先是什么导致此记录计数值在索引上变得如此过时?

我现在的计划是今晚强制重建所有索引,然后按照正常方式运行我的脚本。我是否应该担心索引记录计数再次过时?

Rob*_*own 0

感谢您的回答,我最终使用了那里的脚本

http://ola.hallengren.com/

肯定是我的脚本不适合,例如 xml 列,现在一切都工作得很好。