数据库.Sqlserver.重建索引
什么情况下需要重建索引
都和碎片有关系,总结就是一高(高于20%)一低(低于75%),高不成低不就
1.碎片总计过高
参考值→碎片.碎片总计 > 20%
2.碎片填充度过低
参考值→碎片.页填充度 < 75%
导致页填充度过低的可能原因:
[
"1.有删除",
"2.有分区表",
"3.聚集索引不是数字",
"4.数据比较少(百万以内)"
]
[注意.缺少一张图]
重建索引
ALTER INDEX <name of index> ON <table or view name>
REBUILD WITH (ONLINE = ON,MAXDOP = 4)
{
"ONLINE":
{
"描述":"是否在线执行",
"ON":"在线执行,减少重建过程中的锁(执行时间延长)",
"OFF":"离线执行"
},
"MAXDOP":
{
"描述":"手动配置用于运行索引语句的最大处理器数",
"0":"指定服务器根据当前系统工作负荷确定所使用的 CPU 数目.这是默认值,还是推荐设置",
"1":"取消生成并行计划,操作将以串行方式执行",
"2~64":"将处理器的数量限制为指定的值.根据当前工作负荷,可能使用较少的处理器.如果指定的值大于可用的CPU数量,将使用实际可用的CPU数量"
}
}
--查找碎片率大于40
SELECT
object_name(object_id),
index_type_desc,
alloc_unit_type_desc,
avg_fragmentation_in_percent,
fragment_count,
avg_fragment_size_in_pages,
page_count,
record_count,
avg_page_space_used_in_percent
FROM sys.dm_db_index_physical_stats(DB_ID('DBNAME'),OBJECT_ID(''),NULL,NULL,'Sampled')
WHERE avg_fragmentation_in_percent>40
Sqlserver数据库的好多设置我们都忽略了,
我们日常只是更多的在写SQL语句,
我们可以考虑下升级我们的Sqlserver数据库版本,
优化我们的SQL语句,
深挖在这些SQL语句深处的一些低层知识.
扩展:
- 碎片怎么产生&碎片如何影响到了索引的价值,导致了要重建索引(不破不立)等
→博客园.T-SQL查询高级—SQL Server索引中的碎片和填充因子 - 重建索引分需要几步
第一个阶段为新索引简单够造一颗空B+树...
第二阶段包括由扫描表来获得每行的索引列,对行排序并将它们插入新的B+树中...
最后阶段涉及更新目录以示索引创建已经完成,且索引对查询是可用的.
- ...
各个情况
- 在线创建索引Vs离线创建索引
- 创建索引的时候.表已经存在数据Vs表还没有数据
参考文档
- 博客园.MSSQL 重建索引
- [数据库系统概念.第30章]
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了