zoukankan      html  css  js  c++  java
  • 收缩数据库后自动碎片整理

    use xxDB
    go
    
    select * into #tempT1 from (SELECT name
    FROM sys.dm_db_index_physical_stats (DB_ID(N'xxDB'), OBJECT_ID(N'HumanResources.Employee'), NULL, NULL, NULL) AS a
        JOIN sys.indexes AS b ON a.object_id = b.object_id AND a.index_id = b.index_id 
        and avg_fragmentation_in_percent>30 and name is not null) as t1
        
    select * into #tempT2 from (SELECT 
        name=IDX.Name,
        tableName=O.Name
    FROM sys.indexes IDX
        INNER JOIN sys.index_columns IDXC
            ON IDX.[object_id]=IDXC.[object_id]
                AND IDX.index_id=IDXC.index_id
        LEFT JOIN sys.key_constraints KC
            ON IDX.[object_id]=KC.[parent_object_id]
                AND IDX.index_id=KC.unique_index_id
        INNER JOIN sys.objects O
            ON O.[object_id]=IDX.[object_id]
        INNER JOIN sys.columns C
            ON O.[object_id]=C.[object_id]
                AND O.type='U'
                AND O.is_ms_shipped=0
                AND IDXC.Column_id=C.Column_id
        INNER JOIN  -- 对于一个列包含多个索引的情况,只显示第1个索引信息
        (
            SELECT [object_id], Column_id, index_id=MIN(index_id)
            FROM sys.index_columns
            GROUP BY [object_id], Column_id
        ) IDXCUQ
            ON IDXC.[object_id]=IDXCUQ.[object_id]
                AND IDXC.Column_id=IDXCUQ.Column_id) as t2
       
    select * into #tempT3 from (select t1.name,tableName from #tempT1 t1 left join #tempT2 t2 on 
    t1.name=t2.name group by t1.name,tableName) as t3
    
    if exists(select 1 from #tempT3)
    begin
        DECLARE @var_index varchar(100),
                @var_tableName varchar(100)
            
            declare INDEX_CURSOR cursor local for
                select name,tableName from #tempT3
    
            open INDEX_CURSOR
            fetch next from INDEX_CURSOR into @var_index,@var_tableName
            while @@FETCH_STATUS=0    
            begin    
                exec('ALTER INDEX ['+@var_index+'] ON [dbo].['+@var_tableName+'] REBUILD PARTITION = ALL WITH ( PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, ALLOW_ROW_LOCKS  = ON,ALLOW_PAGE_LOCKS  = ON, ONLINE = OFF, SORT_IN_TEMPDB = OFF )')
                fetch next from INDEX_CURSOR into @var_index,@var_tableName
             end 
             close INDEX_CURSOR
             deallocate  INDEX_CURSOR
    end
    drop table #tempT1
    drop table #tempT2
    drop table #tempT3
  • 相关阅读:
    修改spring MVC配置文件的默认位置
    TCP三次握手四次挥手视频讲解
    Redis端口配置
    applicationContext-redis.xml
    PageHelper的分页原理
    maven的三种工程 pom工程、jar工程、war工程的区别和使用
    springboot 整合spring Data JPA的资源配置pom.xml
    Spring知识点整理
    jdk1.6 和 jdk1.7 区别
    linux中安装redis
  • 原文地址:https://www.cnblogs.com/rexfieBlogs/p/5219340.html
Copyright © 2011-2022 走看看