索引维护(原作者草根)

来源:互联网 发布:德拉蒙德格林数据 编辑:程序博客网 时间:2024/04/30 14:49
 

索引对数据库的影响是显而易见的,这里就不多说了。本文是索引碎片整理和索引重建对数据查询和空间占用的一个实验,和大家一起学习。请高手多多指点。

首先介绍一下索引碎片整理和索引重建的区别:
  与 DBCC DBREINDEX 或任何常规索引生成不同,DBCC INDEXDEFRAG 是一个联机操作,因此它不控制长期锁,该锁会阻塞查询或更新的运行。根据碎片的量,DBCC INDEXDEFRAG 可以比运行 DBCC DBREINDEX 快得多,因为对碎片相对较少的索引进行碎片整理会比生成新索引快得多。另一个优点是,与 DBREINDEX 不同,使用 DBCC INDEXDEFRAG 时索引始终可用。大量的碎片可以导致 DBCC INDEXDEFRAG 运行的时间比 DBCC DBREINDEX 长得多,这一点可能会也可能不会胜过该命令的联机功能所带来的优势。如果两个索引在磁盘上交叉存取事务,DBCC INDEXDEFRAG 将没有作用,原因是 INDEXDEFRAG 打乱了已有的页。若要改善页的聚集,请重建索引。

【个人建议】如果需要整理索引的表可以脱机的话,使用重建索引;不能脱机的话,采用碎片整理。

【实验过程】:
--.查看表的索引(使用sp_helpindex)
指令:sp_helpindex 'tablename'

结果:
id clustered located on PRIMARY src_addr
ix_createtime nonclustered located on PRIMARY createtime 

【结果】该表有一个聚集索引‘id’和一个非聚集索引‘ix_createtime’

--查看数据和索引的碎片信息(使用DBCC SHOWCONTIG)
指令:DBCC SHOWCONTIG (tablename)

结果:
DBCC SHOWCONTIG 正在扫描 'tablename' 表...
表: 'tablename'(1764201335);索引 ID: 1,数据库 ID: 7
已执行 TABLE 级别的扫描。
- 扫描页数.....................................: 50084
- 扫描扩展盘区数...............................: 6308
- 扩展盘区开关数...............................: 50072
- 每个扩展盘区上的平均页数.....................: 7.9
- 扫描密度[最佳值:实际值]....................: 12.50%[6261:50073] --小于 100,则存在碎片。12.50%说明有很多碎片
- 逻辑扫描碎片.................................: 50.40% --0是最好
- 扩展盘区扫描碎片.............................: 52.31%
- 每页上的平均可用字节数.......................: 2728.0
- 平均页密度(完整)...........................: 66.30% --100%是最好


--整理索引碎片(使用DBCC INDEXDEFRAG)
DBCC INDEXDEFRAG (0,tablename,id)
DBCC INDEXDEFRAG (0,tablename,ix_createtime)

--重建索引(使用DBCC DBREINDEX)
DBCC DBREINDEX(tablename,'',0)

--重建索引后查看碎片
DBCC SHOWCONTIG (tablename)
DBCC SHOWCONTIG 正在扫描 'tablename' 表...
表: 'tablename'(1764201335);索引 ID: 1,数据库 ID: 7
已执行 TABLE 级别的扫描。
- 扫描页数.....................................: 36482
- 扫描扩展盘区数...............................: 4578
- 扩展盘区开关数...............................: 4577
- 每个扩展盘区上的平均页数.....................: 8.0
- 扫描密度[最佳值:实际值]....................: 99.63%[4561:4578]
- 逻辑扫描碎片.................................: 0.00%
- 扩展盘区扫描碎片.............................: 19.94%
- 每页上的平均可用字节数.......................: 726.6
- 平均页密度(完整)...........................: 91.02%
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。

--碎片整理对表空间的影响(使用sp_spaceused)
sp_spaceused tablename
tablename 1614319 485360 KB 400672 KB 83216 KB 1472 KB
tablename 1614319 485392 KB 400672 KB 59008 KB 25712 KB --整理非聚集索引的碎片后
tablename 1614319 485424 KB 299512 KB 59008 KB 126904 KB --整理聚集索引的碎片后
tablename 1614938 348736 KB 291856 KB 56832 KB 48 KB --重建索引后

【结论】1.非聚集索引占用的是索引页空间,聚集索引占用的是数据页空间,重建索引后释放出空间。2.碎片整理可以清理出比较多的空间。3.重建索引后效率提升相当明显。


------下边是整理某个数据库的报有索引碎片的脚本(该脚本来自网络)------
set nocount on  
  declare @s_table varchar(50),@s_index varchar(50)  
  create table #test(  
  index_name varchar(100),  
  index_description varchar(500),  
  index_keys varchar(500)  
  )  
  insert into #test  
  exec sp_msforeachtable 'sp_helpindex ''?'''  
  declare c_index cursor for  
  select index_name from #test  
  open c_index  
  fetch next from c_index into @s_index  
  while(@@fetch_status = 0)  
  begin  
  select @s_table = b.name  
  from sysobjects a,sysobjects b  
  where a.id = object_id(@s_index) and  
  a.parent_obj = b.id  
  dbcc indexdefrag(0,@s_table,@s_index) WITH NO_INFOMSGS  
  fetch next from c_index into @s_index  
  end  
  close c_index  
  deallocate c_index

 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 初中没拿毕业证怎么办 初中毕业证没领怎么办 朗逸车电脑坏了怎么办 电车钥匙丢了怎么办 电车钥匙拧不动怎么办 汽车ecu初始化失败怎么办 汽车轻微的抖动怎么办 面包车电脑板紊乱怎么办 车子变速箱坏了怎么办 摩托车怠速不稳怎么办 汽车启动转数高怎么办 鬼火摩托车没力怎么办 摩托车油漆掉了怎么办 发动机怠速不稳怎么办 信用综合评分不足怎么办 综合评分不足是怎么办 综合信用分不足怎么办 iptv突然无信号怎么办 排气系统故障灯亮怎么办 空调冷凝器坏了怎么办 水温空调不制冷怎么办 用冷风机屋里潮怎么办 空调制热不出水怎么办 空调水管堵了怎么办 空调制冷不出水怎么办 空调出风口漏水怎么办 空调管漏水厉害怎么办 电动车车速变慢怎么办 遥控器按钮掉了怎么办 苹果6屏幕凸起怎么办 三星笔记本开机黑屏怎么办 笔记本电脑开机黑屏怎么办三星 笔记本电脑黑屏怎么办灯是亮得 九代雅阁收音机信号不好怎么办 九代雅阁电瓶亏电怎么办 17款雅阁混动汽车胎压灯怎么办 空调制冷出热风怎么办 轿车方向机漏油怎么办 车钥匙感应不灵怎么办 汽车助力泵漏油怎么办 奔腾b70油耗高怎么办