怎样通过向表加clusted索引重整数据库
来源:岁月联盟
时间:2008-01-28
通过向表加clusted索引重整数据库:
---- ArrangeDB.SQL 重整数据库---- CopyRights @2003.12.29 Digital China Management System Co., Ltd.---- 重整流程:把所有用户表增加 clustered 索引,这样SQL SERVER会重整表,然后-- 再删除索引---- 使用时机:日常维护,建议每周做一次重整。---- 注重:做完后请做数据库收缩,更新统计,重新索引,及完整性检查 --drop table #dcms_index_info--要用到的临时表create table #dcms_index_info( index_name sysname, index_description varchar(210), index_keys varchar(2078))--设置环境set NOCOUNT ON--程序开始:变量declare @sql varchar(500)declare @TableName varchar(20)declare @ErrorSave int--用所有的用户表处理declare Cursor1 Cursorfor select name from sysobjects where xtype='U' order by nameopen Cursor1fetch next from Cursor1 into @TableNamewhile @@fetch_status = 0begin --为了检测表中是不是有CREATE_DATE这个列,假如没有就跳过,不做处理 --应该还有更好的方法,我暂时这样用了。不想用sp_columns因为不想建表。 if COLUMNPROPERTY(OBJECT_ID(@TableName),'CREATE_DATE','PRECISION') is not null begin print 'process table ' @TableName --取得当前表的索引信息 delete #dcms_index_info set @sql = ' sp_helpindex ''' @TableName ''' ' insert into #dcms_index_info exec (@sql) --查找是不是已经有聚簇索引(clustered),假如已经有了就不做。select index_name from #dcms_index_info where index_description like 'clustered%' if @@ROWCOUNT = 0 begin set @sql = ' create clustered index DcTempIndex001 on ' @TableName ' ( CREATE_DATE ) ' exec (@sql) set @sql = ' DROP index ' @TableName '.DcTempIndex001 ' exec (@sql) end end fetch next from Cursor1 into @TableNameend drop table #dcms_index_infoclose Cursor1deallocate Cursor1 |