sqlserver重建(rebuild)索引可以提高查询速度

当随着表的数据量不断增长,很多存储的数据进行了不适当的跨页(sqlserver中存储的最小单位是页,页是不不可再分的),会产生很多索引的碎片。这时候需要重建索引来提高查询性能。

如何查看索引的使用情况:
SELECT 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('db_name'),OBJECT_ID('table_name),NULL,NULL,'Sampled')

上面的语句是查询数据库db_name的表table_name的索引使用情况。

查询结果中的列avg_fragment_size_in_pages值超过40%就需要重建索引,可以减少IO扫描操作。

重建索引:
alter index pk_my_users on my_users rebuild;

测试结果:

原来的碎片达到89%,重建索引碎片降到2%,查询速度快了1倍。(数据量为百万级)


记得2004年开始做DBA不久,重建一个8000万数据量的大表的索引,
我当时很傻很傻,计划:
drop index 然后准备create index,
结果,当drop index之后,数据库不响应了,系统太依赖这张表了,很多访问等待了,天哪!!

现在懂了,重建索引要
alter index xxxx rebuild;

小心呀,那一次,让我到现在都难以忘记当时系统不能访问的慌张,这可是公司最核心的数据库!

——索引对select没有坏处,只有好处,但对DML(delete,update,insert)有坏处,增加了IO开销,而且索引本身的结果也会不断的变差,至于适不适合需要结合具体情况分析,对各种操作做一个权衡取舍!


弱弱的问一下,在rebuild索引的过程中,访问该索引对应的基表时,索引能使用否。

——应该可以,因为rebuild是保留以前的索引树,通过这个索引树构建新的平衡索引树,所以之前的索引树存在切可用


http://lusanxiong.iteye.com/blog/1544950


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值