zoukankan      html  css  js  c++  java
  • Sqlserver:在sql2005查看索引的碎片统计情况,并给出处理意见的自动化批处理脚本

    --查询基本的信息
    if object_id('tempdb..#a') is not null
        drop table #a

    select db_name(a.database_id) as database_name,object_name(a.object_id) as table_name,b.name as index_name,a.partition_number
        ,a.index_type_desc,a.index_depth,a.index_level
        ,alloc_unit_type_desc
        ,avg_fragmentation_in_percent,avg_fragment_size_in_pages,avg_page_space_used_in_percent
        ,page_count,record_count
        ,min_record_size_in_bytes,max_record_size_in_bytes,avg_record_size_in_bytes
        ,forwarded_record_count
    into #a
    from  sys.dm_db_index_physical_stats(db_id('usercenter'),null,null,null,'detailed') a inner join sys.indexes b on a.object_id = b.object_id and a.index_id = b.index_id
    order by a.database_id,object_name(a.object_id),b.name,a.partition_number

    --统计索引碎片情况
    if object_id('tempdb..#b')  is not null
        drop table #b
       
    select database_name,table_name,index_name,index_type_desc,index_depth,index_level,count(partition_number) as count_partition_number,max(avg_fragmentation_in_percent) as max_avg_fragmentation_in_percent
    into #b
    from #a
    where page_count > 0
    group by database_name,table_name,index_name,index_type_desc,index_depth,index_level
    order by database_name,table_name,index_name,index_type_desc,index_depth,index_level

    --统计索引碎片情况-最大max_avg_fragmentation_in_percent
    if object_id('tempdb..#c')  is not null
        drop table #c
             
    select distinct table_name,index_name,max(max_avg_fragmentation_in_percent) as max_avg_fragmentation_in_percent
    into #c
    from #b
    group by table_name,index_name
    order by table_name,index_name



    --给出索引优化建议
    /*
    功能    ALTER INDEX REORGANIZE    ALTER INDEX REBUILD    CREATE INDEX WITH DROP_EXISTING
    可以更改索引定义。    否    否    是
    可以设置或修改索引选项。    否    是    是
    可以在单个事务中重新生成多个索引。    是    是    否
    可以联机重新生成大部分索引类型,而不会阻止运行查询或更新。    总是    是    是
    已分区索引可以重新分区。    否    否    是
    可以将索引移动到另一个文件组中。    否    否    是
    需要额外的临时磁盘空间。    是    是    是
    重新生成聚集索引的操作将重新生成相关的非聚集索引。    否(除非指定关键字 ALL)    否(除非指定关键字 ALL)    否(除非更改索引定义)
    可以重新生成强制 PRIMARY KEY 和 UNIQUE 约束的索引,而不用删除并重新创建这些约束。    是    是    是
    可以重新生成单个索引分区。    是    是    否
    具有DBCC等效语句    是    是(但总是脱机操作)    否
    */
    select
        case
            when max_avg_fragmentation_in_percent <30 then 'ALTER INDEX ' + index_name + ' ON ' + table_name + ' REORGANIZE;'
            else 'ALTER INDEX ' + index_name + ' ON ' + table_name + ' REBUILD WITH (ONLINE = ON);'
        end
    from #c
    where index_name is not null and max_avg_fragmentation_in_percent > 10
    order by table_name,index_name

  • 相关阅读:
    在ASP.NET Core中使用TagHelpers
    ASP.NET Core使用Redis
    ASP.NET Core MVC中视图
    HTTP状态码
    ASP.NET Core中静态文件
    ASP.NET Core中使用依赖注入
    在ASP.NET Core中使用多个环境
    ASP.NET Core读取配置文件
    HTML+CSS解决高度塌陷和垂直重叠
    Element-UI的表格合计行的列添加操作按钮
  • 原文地址:https://www.cnblogs.com/jinzhenshui/p/1503228.html
Copyright © 2011-2022 走看看