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

数据库索引重组与重建 - ufo233

"

不久前,遇到了一个问题。一个普通的数据库查询出现了超时,表的数据量不多,不应该会出现超时的情况。

时间发生在凌晨,组长说应该DBA在执行索引重组与重建脚本。哦?这是什么我完全不知道,上百度!

什么是索引

索引大家应该都了解,索引的作用就像书的目录,可以让数据库在查询时更快定位数据,而不是整表扫描。

  1. 提升查询效率
  2. 加速排序和分组
  3. 保证唯一性

什么是重组与重建索引呢?为什么要这么做?

索引不是一劳永逸的,它们会因为数据更新而“碎片化”:

  1. 插入:可能在页中间插入新值,导致数据页分裂。
  2. 删除:留下空洞。
  3. 更新:可能把数据移到别的页。

这些操作时间长了会让索引的存储结构(B+树)效率下降。

所以DBA通常会定期重建索引或重组索引,来减少碎片、提高查询性能。

为什么多在凌晨执行

白天系统访问量大,重建索引会锁表/占用大量I/O和CPU,影响业务。

凌晨访问量小,适合做维护任务(索引重建、统计信息更新、备份)。

SQL脚本

知道了什么是重组与重建索引,就要理解如何实现该操作呢?

找Chatgpt写一个脚本,解析一下看看。

--关闭行计数返回
SET NOCOUNT ON;DECLARE @SchemaName NVARCHAR(256);  --变量模式
DECLARE @TableName NVARCHAR(256);   --变量表名
DECLARE @IndexName NVARCHAR(256);   --变量索引名
DECLARE @AvgFrag DECIMAL(18,2);     --变量平均碎片率
DECLARE @sql NVARCHAR(MAX);         --变量要执行的SQL字符串--判断是否已存在,先删后建
IF OBJECT_ID('tempdb..#FragList') IS NOT NULLDROP TABLE #FragList;--创建临时表
CREATE TABLE #FragList
(ObjectId INT,IndexId INT,SchemaName NVARCHAR(256),TableName NVARCHAR(256),IndexName NVARCHAR(256),AvgFragmentation DECIMAL(18,2),PageCount BIGINT
);--统计索引碎片率信息
--sys.dm_db_index_physical_stats 获取当前数据库的索引物理统计
INSERT INTO #FragList
SELECTips.object_id,ips.index_id,s.name AS SchemaName,t.name AS TableName,i.name AS IndexName,ips.avg_fragmentation_in_percent,ips.page_count
FROM sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, 'LIMITED') ips
JOIN sys.indexes i ON ips.object_id = i.object_id AND ips.index_id = i.index_id
JOIN sys.tables t ON t.object_id = ips.object_id
JOIN sys.schemas s ON t.schema_id = s.schema_id
WHERE ips.database_id = DB_ID()AND i.type_desc <> 'HEAP'AND ips.page_count > 100; -- 可选:只处理较大的索引--游标批处理(等同于foreach),遍历#FragList
DECLARE cur CURSOR LOCAL FAST_FORWARD FOR
SELECT SchemaName, TableName, IndexName, AvgFragmentation
FROM #FragList;OPEN cur;
FETCH NEXT FROM cur INTO @SchemaName, @TableName, @IndexName, @AvgFrag;WHILE @@FETCH_STATUS = 0
BEGINSET @sql = NULL;IF @AvgFrag BETWEEN 5 AND 30SET @sql = N'ALTER INDEX [' + @IndexName + '] ON [' + @SchemaName + '].[' + @TableName + '] REORGANIZE;';ELSE IF @AvgFrag > 30SET @sql = N'ALTER INDEX [' + @IndexName + '] ON [' + @SchemaName + '].[' + @TableName + '] REBUILD WITH (ONLINE = ON);';IF @sql IS NOT NULLBEGINPRINT @sql;EXEC sp_executesql @sql;ENDFETCH NEXT FROM cur INTO @SchemaName, @TableName, @IndexName, @AvgFrag;
ENDCLOSE cur;
DEALLOCATE cur;
```"
http://www.jsqmd.com/news/48908/

相关文章:

  • 【前端小站】CSS 样式美学:从基础语法到界面精筑的实战宝典 - 实践
  • 2025年GEO公司综合实力排行榜:上饶大牛数据服务有限公司领跑行业
  • 本年口碑好的GEO品牌推荐
  • P1024 一三元次方程
  • springboot学习之注解(2)
  • 2025配置管理平台选型:如何破解CMDB建设痛点,从需求匹配到产品选型的实战指南
  • 2025欧洲留学机构十强有哪些
  • 2025南昌哪个留学中介信誉好
  • 2025广州哪家留学机构比较好一点
  • 2025大连靠谱留学机构
  • 社区新体验!一款基于 Golang + Vue 的开源社区系统!
  • 2025北京有多少家留学机构啊
  • 2025年性价比高的国产plc批发厂家权威推荐榜单:国产plc兼容西门子/国产plc平替西门子/国产plc源头厂家精选
  • 2025 年 11 月毛刷辊厂家权威推荐榜:工业/定做/清洁/纺织/钢制毛刷辊,耐磨高效与深度清洁的匠心之选
  • CF2157
  • 2025 年 11 月合肥搬家公司权威推荐榜:专业团队与贴心服务,覆盖包河区、蜀山区等全市范围,高效省心搬家首选
  • Dexie.js 使用教程
  • 2025重庆好的留学机构
  • 2025新加坡留学中介排行
  • 2025苏州最好的留学机构在哪里啊
  • 2025深圳美国留学机构排名前十
  • 详细介绍:手机环境光自动亮度调节系统完整实现详解
  • 2025 年 11 月激光切割钢结构,大型钢结构,C 型钢结构厂家最新推荐,聚焦资质、案例、售后的五家机构深度解读!
  • Web 常见名词解释
  • 2025 年 11 月钢结构安装,钢结构设计,贰级资质钢结构,H 型钢结构最新推荐:聚焦资质、案例、售后的五家机构深度解读
  • AI与智能工具如何终结自由职业者发票困境
  • 2025年山东连栋玻璃温室公司权威推荐榜单:玻璃智能温室/玻璃连栋温室/玻璃温室设计源头公司精选
  • 2025 合同纠纷律师咨询最新推荐排行榜:股权债务 / 劳动仲裁 / 民商事诉讼顶尖法律顾问权威指南
  • 【数字逻辑】流水灯实战!红5秒/黄2秒/绿1秒精准控时(74HC161+74HC138完整便捷的方案+接线图)
  • windows11关闭系统自动更新