当前位置: 首页 > news >正文

[数据库][sqlserver]查看索引碎片

 

  1. SQL 查询部分

    • 这段 SQL 查询是从系统动态管理视图 sys.dm_db_index_physical_stats 获取索引碎片化信息。sys.dm_db_index_physical_stats 提供了关于表或索引视图中每个索引的页和行的物理信息。

    • OBJECT_NAME(ips.object_id) 函数用于获取对象(表)的名称。ips.object_id 来自 sys.dm_db_index_physical_stats 视图,它标识了表或索引视图的 ID。

    • i.name 是索引的名称,它通过连接 sys.indexes 表(连接条件为 ips.object_id = i.object_id AND ips.index_id = i.index_id)来获取。

    • ips.index_type_desc 说明了索引的类型,例如是否是聚集索引、非聚集索引等。

    • ips.avg_fragmentation_in_percent 表示索引的平均碎片率,这是衡量索引物理存储碎片化程度的重要指标。在 WHERE 子句中,筛选出碎片率大于 60% 的索引。

    • 连接 sys.partitions 表(连接条件为 p.object_id = ips.object_id AND p.index_id IN (0, 1)),其中 p.index_id 为 0 表示堆(没有聚集索引的表),1 表示聚集索引,通过 SUM(p.rows) 获取表中的行数。

    • 查询结果按表的行数(tablerows)降序排列,这样可以优先查看行数较多且索引碎片率较高的表。

  2. 索引和统计信息重建部分

    • ALTER INDEX ALL ON STCUSTOMIZE REBUILD WITH (ONLINE = ON) 这句代码用于重建 STCUSTOMIZE 表的所有索引,并且指定 ONLINE = ON。在重建索引时,ONLINE = ON 允许在重建索引的过程中,表仍然可以被访问(对于支持的操作)。不过需要注意的是,有些情况下可能无法进行在线重建,例如重建索引时涉及到索引视图等复杂场景可能会有局限性。

    • UPDATE STATISTICS STCUSTOMIZE 用于更新 STCUSTOMIZE 表的统计信息。统计信息对于查询优化器来说非常重要,它帮助优化器选择合适的查询执行计划。在重建索引后更新统计信息,可以使查询优化器更好地了解表数据的分布情况,从而生成更高效的执行计划。

这些 SQL 语句通常用于数据库的维护操作,目的是优化数据库性能,通过对碎片化严重的索引进行重建和更新统计信息来改善查询效率。不过,在执行这些操作之前,最好备份数据库,因为索引重建等操作可能会对数据库的性能产生短期影响,尤其是在生产环境中。

SELECTOBJECT_NAME(ips.object_id) AS TableName,i.name AS IndexName,ips.index_type_desc,ips.avg_fragmentation_in_percent,SUM(p.rows) AS tablerows 
FROMsys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, 'SAMPLED') ips
JOINsys.indexes i ON ips.object_id = i.object_id AND ips.index_id = i.index_id
JOINsys.partitions p ON p.object_id = ips.object_id AND p.index_id IN (0, 1)  -- 关联堆或聚集索引
WHEREips.avg_fragmentation_in_percent > 60
GROUP BYOBJECT_NAME(ips.object_id),i.name,ips.index_type_desc,ips.avg_fragmentation_in_percent
ORDER BYtablerows DESC;-- 重建表的所有索引及统计信息
ALTER INDEX ALL ON STCUSTOMIZE REBUILD WITH (ONLINE = ON);
UPDATE STATISTICS STCUSTOMIZE;

http://www.xdnf.cn/news/355105.html

相关文章:

  • Docker网络模式深度解析:Bridge与Host模式对比及实践指南
  • 华为银河麒麟 V10(ARM)系统软件部署全攻略:Redis、RabbitMQ、MySQL 等集群搭建指南
  • Java设计模式之工厂方法模式:从入门到精通
  • 全球首款无限时长电影生成模型SkyReels-V2本地部署教程:视频时长无限制!
  • 星光云720全景VR系统升级版,720全景,360全景,vr全景,720vr全景
  • 游戏引擎学习第267天:为每个元素添加裁剪矩形
  • 【Qt】之【Bug】点击按钮(ui->pushButton)触发非本类设置的槽函数
  • 污水处理厂逆袭:Ethernet/IP 转 CANopen 开启“智净”时代
  • 【计算机视觉】OpenCV实战项目: Fire-Smoke-Dataset:基于OpenCV的早期火灾检测项目深度解析
  • 【Qt】编译 Qt 5.15.x For Windows 基础教程 Visual Studio 2019 MSVC142 x64
  • 记录 Mysql5.7 升级到 Mysql8.0 遇到的问题
  • vscode离线安装python插件
  • 红黑树算法笔记
  • 解决 Ubuntu DNS 无法解析问题(适用于虚拟机 长期使用)
  • RT-THREAD RTC组件中Alarm功能驱动完善
  • 【RAG】重点部分 RAG-Fusion, Decomposition, HyDE 和 Routing
  • Java设计模式之建造者模式:从入门到精通
  • Spring MVC Session 属性 (@SessionAttributes) 是什么?如何使用它共享数据?
  • Docker Compose 的详细使用总结、常用命令及配置示例
  • Java启动和停止jar文件sh脚本:自适应文件名方式启停 + 写死环境 启动;自适应文件名方式 + 命令行传参切换环境 启动
  • Spring、SpringMVC、SpringBoot、SpringCloud 联系与区别
  • Java、javax 和 Jakarta有什么区别?
  • 《P1177 【模板】排序》
  • MySQL 性能调优:从执行计划到硬件瓶颈
  • 人力资源管理系统如何有效提高招聘效率?
  • 若依定制pdf生成实战
  • neo4j图数据库基本概念和向量使用
  • AI云防护真的可以防攻击?你的服务器用群联AI云防护吗?
  • ESD防护ANT静电防护方案
  • 学前数学思维:初始行程