架构师_程序员

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 151|回复: 0

[资料] SQL Server 性能优化之索引碎片

[复制链接]
发表于 2020-12-27 22:32:27 | 显示全部楼层
索引碎片概述

什么是索引碎片,为什么我应该关注它:
当索引包含的页中,索引中的逻辑排序(基于索引中的键值)与索引页中的物理排序不匹配时,就存在碎片。
无论何时对基础数据执行插入、更新或删除操作,数据库引擎 都会自动修改索引。 例如,在表中添加行可能会导致拆分行存储索引中的现有页,以腾出空间来插入新键值。 随着时间的推移,这些修改可能会导致索引中的信息分散在数据库中(含有碎片)。 当索引包含的页中的逻辑排序(基于键值)与数据文件中的物理排序不匹配时,就存在碎片。
大量碎片式索引可能会降低查询性能,因为需要额外 I/O 来查找索引指向的数据。 较多的 I/O 会导致应用程序响应缓慢,特别是在涉及扫描操作时。
检查数据库索引碎片

命令:

QQ截图20201227220637.jpg

碎片整理有两种方式:重新组织索引和重新创建索引,重建索引是指在一个事务中,删除旧的索引,并重建新的索引,这种方式会回收原有索引的硬盘空间,并分配新的存储空间,以创建索引结构。重组索引是指不分配新的存储空间,在原有的空间基础上,重新组织索引结构的叶子节点,使数据页的逻辑顺序和物理顺序保持一致,并释放索引中多余的空间,这就是说,重组索引是为了减少叶子节点的外部碎片。

使用函数 sys.dm_db_index_physical_stats 检测碎片的程度,字段 avg_fragmentation_in_percent   返回的逻辑碎片的百分比,一般情况下,微软推荐以30%为阈值:

avg_fragmentation_in_percent >5% and <=30%: 重组索引(ALTER INDEX REORGANIZE);
avg_fragmentation_in_percent >30%: 重建索引(ALTER INDEX REBUILD);

avg_fragmentation_in_percent:索引碎片百分比,如果碎片小于10%~20%,碎片不太可能会成为问题,如果索引碎片在20%~40%,碎片可能成为问题,但是可以通过索引重组来消除索引解决,大规模的碎片(当碎片大于40%),可能要求索引重建。


查询指定表的所有索引的碎片信息

QQ截图20201227220754.jpg

表重建索引


重建整个数据库所有表的索引

QQ截图20201227223129.jpg

参考资料:https://docs.microsoft.com/zh-cn/sql/relational-databases/indexes/reorganize-and-rebuild-indexes?view=sql-server-ver15




上一篇:因 URL 意外地以“/itsvse”结束,请求格式无法识别。
下一篇:ORM 框架 Dapper 简单使用
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2021-1-24 08:25

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表