SQL Server 2005索引碎片整理SQL语句

王朝学院·作者佚名  2009-08-30
窄屏简体版  字體: 小  |  中  |  大  |  超大  

/*******************************************************/

/* 功能:SQL Server 2005索引碎片整理 */

/* 逻辑碎片>=30重建索引,<30重新组织索引 */

/* 作者:贾桂军 */

/* 日期:2008年6月11日 */

/*******************************************************/

/***********SQL Server 2005索引碎片整理*****************/

/**使用方法:将需要整理索引碎片的数据库设置为当前数据库**/

set nocount on

--使用游标重新组织指定库中的索引,消除索引碎片

--R_T层游标取出当前数据库所有表

declare R_T cursor

for select name from sys.tables

declare @T varchar(50)

open r_t

fetch next from r_t into @t

while @@fetch_status=0

begin

--R_index游标判断指定表索引碎片情况并优化

declare R_Index cursor

for select t.name,i.name,s.avg_fragmentation_in_percent from sys.tables t

join sys.indexes i on i.object_id=t.object_id

join sys.dm_db_index_physical_stats(db_id(),object_id(@T),null,null,'limited') s

on s.object_id=i.object_id and s.index_id=i.index_id

declare @TName varchar(50),@IName varchar(50),@avg int,@str varchar(500)

open r_index

fetch next from r_index into @TName,@Iname,@avg

while @@fetch_status=0

begin

if @avg>=30 --如果碎片大于30,重建索引

begin

set @str='alter index '+rtrim(@Iname)+' on dbo.'+rtrim(@tname)+' rebuild'

end

else --如果碎片小于30,重新组织索引

begin

set @STR='alter index '+rtrim(@Iname)+' on dbo.'+rtrim(@tname)+' reorganize'

end

print @str

exec (@str) --执行

fetch next from r_index into @TName,@Iname,@avg

end

--结束r_index游标

close r_index

deallocate r_index

fetch next from r_t into @t

end

--结束R_T游标

close r_t

deallocate r_t

set nocount off

/*

--查看指定表的索引情况

select t.name,i.name,s.avg_fragmentation_in_percent from sys.tables t

join sys.indexes i on i.object_id=t.object_id

join sys.dm_db_index_physical_stats(db_id(),object_id('t2'),null,null,'limited') s

on s.object_id=i.object_id and s.index_id=i.index_id

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航