SQLServer数据库 索引重建或重组
小标 2018-07-18 来源 : 阅读 2401 评论 0

摘要:本文主要向大家介绍了SQLServer数据库 索引重建或重组,通过具体的内容向大家展现,希望对大家学习SQLServer数据库有所帮助。

本文主要向大家介绍了SQLServer数据库 索引重建或重组,通过具体的内容向大家展现,希望对大家学习SQLServer数据库有所帮助。

 set nocount on  
    DECLARE @db_id SMALLINT;
    DECLARE @object_id INT; 
    declare @flag int;

    select @db_id = DB_ID(N'HlData');    
    --使用游标重新组织指定库中的索引,消除索引碎片  
    --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  
        select @object_id=OBJECT_ID(@t); 
        
        --select @flag=0;
        --
        --print '@t='+@t;
        --print '--******************************--';

        --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,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>=40  --如果碎片大于40,重建索引
            begin  
                set @str='alter index '+rtrim(@Iname)+' on dbo.'+quotename(rtrim(@tname))+' rebuild'
            end  
            else   --如果碎片小于40,重新组织索引  
            begin  
                set @STR='alter index '+rtrim(@Iname)+' on dbo.'+quotename(rtrim(@tname))+' reorganize'
            end  
            /*
            if @avg>=10  --如果碎片大于10
            begin
                if @flag>0
                begin
                    print '@t='+@t;
                    select    @flag=1;
                end;
                
                print '@TName='+@TName;
                print '@Iname='+@Iname;
                print '@avg='+Convert(varchar(10),@avg);
            end
            */
            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

--***********************SQL Server 索引重建或重组 End***********************--

本文由职坐标整理并发布,了解更多内容,请关注职坐标SQL Server数据库频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 3 不喜欢 | 0
看完这篇文章有何感觉?已经有3人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程