SQL SERVER 2005索引自动维护

来源:网络 责任编辑:栏目编辑 发表时间:2013-07-02 01:07 点击:

 

先直接上代码:

1.    CREATE PROC SHANE_AutoProIndex 

2.    AS

3.   

4.    DECLARE @tblName VARCHAR(40) 

5.    DECLARE @indexID INT

6.    DECLARE @proFlag FLOAT

7.    DECLARE @indexName VARCHAR(40) 

8.    DECLARE @sql varchar(200) 

9.   

10.   DECLARE _tblCur CURSOR FOR SELECT TblName FROM AutoProIndexModel 

11.   OPEN _tblCur 

12.   FETCH NEXT FROM _tblCur INTO @tblName 

13.   WHILE @@FETCH_STATUS = 0 

14.   BEGIN

15.   PRINT 'Now is Proing: ' + @tblName 

16.   --PRINT @tblName 

17.  

18.   DECLARE _indexCur CURSOR FOR SELECT index_id, avg_fragmentation_in_percent  

19.   FROM sys.dm_db_index_physical_stats(DB_ID(N'AdventureWorks'), OBJECT_ID(@tblName), NULL, NULL, 'LIMITED') 

20.     

21.   OPEN _indexCur 

22.   FETCH NEXT FROM _indexCur INTO @indexID, @proFlag 

23.  

24.   WHILE @@FETCH_STATUS = 0 

25.   BEGIN

26.      PRINT 'The index id is: ' + CAST(@indexID AS VARCHAR(10)) + ', avg_fra_in_percent is: ' + CAST(@proFlag AS VARCHAR(20)) 

27.      IF @proFlag > 5 AND @proFlag < 30 

28.       BEGIN

29.        SELECT @indexName = name FROM sys.indexes WHERE [object_id] = OBJECT_ID(@tblName) AND index_id = @indexID 

30.        print @indexName + ' must be  REORGANIZE'

31.        SET @sql = 'ALTER INDEX ' + @indexName + ' ON ' + @tblName + ' REORGANIZE'

32.        EXEC(@sql) 

33.   PRINT @SQL 

34.       END

35.      ELSE IF @proFlag > 30 

36.       BEGIN

37.        SELECT @indexName = name FROM sys.indexes WHERE [object_id] = OBJECT_ID(@tblName) AND index_id = @indexID 

38.        print @indexName + ' must be  REBUILD'

39.        SET @sql = 'ALTER INDEX ' + @indexName + ' ON ' + @tblName + ' REBUILD'

40.        EXEC(@sql) 

41.   PRINT @SQL 

42.       END

43.      FETCH NEXT FROM _indexCur INTO @indexID, @proFlag 

44.   END  

45.  

46.   CLOSE _indexCur 

47.   DEALLOCATE _indexCur 

48.  

49.   print ''

50.   FETCH NEXT FROM _tblCur INTO @tblName 

51.   END

52.  

53.   CLOSE _tblCur 

54.   DEALLOCATE _tblCur 

55.  

该PROC中有张表AutoProIndexModel,这张表里面存储的是需要维护索引的几张表名。

该PROC流程如下:

1.先使用游标读取AutoProIndexModel中的需要整理的表的信息,进行循环

2.使用DMF,sys.dm_db_index_physical_stats得出每张表中每个索引的碎片情况后,根据avg_fragmentation_in_percent 字段的值进行具体的操作

3.如果avg_fragmentation_in_percent 在5-30之间进行索引重新组织,>30则索引重建。

新建个计划任务后,定时调用该存储过程就可以实现索

    发表评论
    请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
    用户名: 验证码:点击我更换图片
    最新评论 更多>>

    推荐热点

    • sql常见面试题
    • SQL SERVER 2005性能之跟踪
    • SQL编程(一)
    • LINUX上RMAN自动备份脚本
    • sql server面试题
    • 如何将多个SQL查询统计结果一次显示出来
    • 浅谈SQL Server中的事务日志(三)----在简单恢复模式下日志的角色
    • SQL小技巧系列 --- 行转列合并
    • sql server 列转行
    网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
    Copyright © 2008-2015 计算机技术学习交流网. 版权所有

    豫ICP备11007008号-1