实用SQL: 通过向表加clusted索引重整数据库

  • 来源: 赛迪网 作者: 若水   2008-03-29/13:37
  • -- {q}x;<  
    --  ArrangeDB.SQL 重整数据库 &f1n]m+  
    -- C;}  
    --  CopyRights @2003.12.29 Digital China Management System Co., Ltd. q)"8D z_|Z  
    -- '2 x+ph  
    -- 重整流程:把所有用户表增加 clustered 索引,这样SQLSERVER会重整表,然后 9%7*~bW_  
    --再删除索引 c^/V*A'qG[  
    -- 'n gn  
    -- 使用时机:日常维护,建议每周做一次重整。 6+q ]l+  
    -- pc kI   
    -- 注意事项:做完后请做数据库收缩,更新统计,重新索引,及完整性检查 ^BHPb1oT  
    b~KsX(]  
    --drop table #dcms_index_info GTM`@  
    --要用到的临时表 :PFTl;  
    create table #dcms_index_info hK%o6mx3^  
    ( `I2dE\!M  
      index_name sysname, =7rW2#tE  
      index_description varchar(210), 0GmV,y+_5  
      index_keys varchar(2078) dHlXe@Rw"g  
    ) ne%c'-P*_  
    Y'Pn m  
    --设置环境 p)Q!!/K6  
    set NOCOUNT ON .$=\,30w  
    --程序开始:变量 +ZVuE o  
    declare @sql varchar(500) {R 4t?if  
    declare @TableName varchar(20) 5*l1W3DhW  
    declare @ErrorSave int RTY/078  
    T\?V|[bd  
    --用所有的用户表处理 -|%D!?  
    declare Cursor1 Cursor ?>Xd<QM  
    for O+6x)+,  
    select name from sysobjects where xtype='U' order by name p^7?TOpX)  
    P)RB]}ij  
    open Cursor1 VR2h)G:M^  
    fetch next from Cursor1 into @TableName <`,: ,"   
    6QN&cvF`  
    while @@fetch_status = 0 <`bJM]D-/  
    begin }(H&>f1z  
    --为了检测表中是不是有CREATE_DATE这个列,易飞的表中都有,如果没有就跳过,不过处理 HzD)7{  
    --应该还有更好的方法,我暂时这样用了。不想用sp_columns因为不想建表,慢就慢点吧 w,V>TN0  
    if COLUMNPROPERTY(OBJECT_ID(@TableName),'CREATE_DATE','PRECISION') is not null MuQPg:j  
    begin Ax#6>^JI  
      print 'process table ' + @TableName Hsfwfd-5  
    K]y1A'v  
      --取得当前表的索引信息 ?~H(wkGzL  
      delete #dcms_index_info T;qg@B?fa  
      set @sql = ' sp_helpindex ''' + @TableName + ''' ' 3n7@ 2!  
      insert into #dcms_index_info exec (@sql) nN/bK`@^  
    H7&W`nC^  
      --查找是不是已经有聚簇索引(clustered),如果已经有了就不做,在易飞中有clustered索引是少数 ex zx  
      select index_name from #dcms_index_info where index_description like 'clustered%' xHiNMW  
    N@pIp!  
      if @@ROWCOUNT = 0 [sT]a]X"-  
      begin ;mG_W  
      set @sql = ' create clustered index DcTempIndex001 on ' + @TableName + ' ( CREATE_DATE ) ' q[}qK   
      exec (@sql) l< drk}ES  
    d/$`t 9n  
      set @sql = ' DROP index ' + @TableName + '.DcTempIndex001 ' DGsf}6 B1  
      exec (@sql) 6AACVdy" #p#分页标题#e# 
      end *@{)3]>M@  
    end rGv5W5.  
    X|.p`y;  
    fetch next from Cursor1 into @TableName Pd+&9w_ (  
    end wYqB  
    Xi} "U-Xe  
    drop table #dcms_index_info " _$1Vdff  
    close Cursor1 j<AOltu  
    deallocate Cursor1 >5^s_1#i  
    fTIWwX[P  
    {<t>MIE%  
    gail=HA2  

    评论 {{userinfo.comments}}

    {{money}}

    {{question.question}}

    A {{question.A}}
    B {{question.B}}
    C {{question.C}}
    D {{question.D}}
    提交

    驱动号 更多