您当前的位置: 首页 » mssql » 自动找出需要重建索引的表并生成语句

自动找出需要重建索引的表并生成语句

SELECT ix.name,'ALTER INDEX [' + ix.name + '] ON [' + s.name + '].[' + t.name + '] ' +
 
       CASE
 
              WHEN ps.avg_fragmentation_in_percent > 15
 
              THEN 'REBUILD'
 
              ELSE 'REORGANIZE'
 
        END +
 
        CASE
 
              WHEN pc.partition_count > 1
 
              THEN ' PARTITION = ' + CAST(ps.partition_number AS nvarchar(MAX))
 
              ELSE ''
 
        END,
 
        avg_fragmentation_in_percent
 
FROM    sys.indexes AS ix
 
        INNER JOIN sys.tables t
 
        ON     t.object_id = ix.object_id
 
        INNER JOIN sys.schemas s
 
        ON     t.schema_id = s.schema_id
 
        INNER JOIN
 
              (SELECT object_id                   ,
 
                      index_id                    ,
 
                       avg_fragmentation_in_percent,
 
                      partition_number
 
              FROM  sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL, NULL, NULL)
 
              ) ps
 
        ON     t.object_id = ps.object_id
 
           AND ix.index_id = ps.index_id
 
        INNER JOIN
 
              (SELECT  object_id,
 
                       index_id ,
 
                       COUNT(DISTINCT partition_number) AS partition_count
 
              FROM     sys.partitions
 
              GROUP BY object_id,
 
                       index_id
 
              ) pc
 
        ON     t.object_id              = pc.object_id
 
           AND ix.index_id              = pc.index_id
 
WHERE   ps.avg_fragmentation_in_percent > 10
 
    AND ix.name IS NOT NULL and (charindex('ne',ix.name)>0 or CHARINDEX('sc',ix.name) > 0)
   

上一篇:没有文章了
下一篇:sql批量删除表
留下脚印压缩包密码:sosuo8
名字:
全部评论:
loading...
申明:本站部分文章来自网络,由于各种原因对文章的来源无从考究,如果您是“ 自动找出需要重建索引的表并生成语句 ”的原作者,若侵犯您的版权,请与我联系!联系方法:email:ahuinan@21cn.com  QQ:106494262
文章档案
  • 作者:佚名
  • 来源:转载
  • 日期:2013/8/7 13:36:00
  • 点击:loading...
网友投票(您觉得这篇文章怎样?)
loadding...请稍侯......