zoukankan      html  css  js  c++  java
  • 查找未使用的非聚集索引和表 for sql server 2005/2008


    查找未使用的非聚集索引和未使用的表.
    DMV:sys.dm_db_index_usage_stats
    The counters are initialized to empty whenever the SQL Server (MSSQLSERVER) service is started. In addition, whenever a database is detached or is shut down (for example, because AUTO_CLOSE is set to ON), all rows associated with the database are removed.

    代码参考:
    http://www.cnblogs.com/nzperfect/archive/2010/03/25/1695449.html



    --查找未使用的非聚集索引(排除聚集索引和堆表)
    --
    This returns all the noclustered indexes that have not been used for any requests by users 
    --
    or the system from the time SQL Server is started.
    select tablename,indexname,'drop index '+tablename+'.'+indexname as dropIndexCommand
    from 
        (
            
    select object_name(i.object_idas tablename, i.name as indexname
            
    from sys.indexes i
            
    left outer join sys.dm_db_index_usage_stats s
                
    on s.object_id = i.object_id and s.index_id = i.index_id
                
    and s.database_id = db_id()
            
    where objectproperty(i.object_id'IsUserTable'= 1
                
    and objectproperty(i.object_id,'IsMSShipped')=0
                
    and i.index_id > 1 -- 0 indicates the heap   1 indicates the clustered index  
                and i.is_primary_key = 0   --  1 indicates the primary key
                
    and s.object_id is null
            
    union all
            
    select object_name(i.object_idas tablename, i.name as indexname
            
    from sys.indexes i
            
    inner join sys.dm_db_index_usage_stats s
                
    on s.object_id = i.object_id and s.index_id = i.index_id
                
    and s.database_id = db_id()
            
    where objectproperty(i.object_id'IsUserTable'= 1
                
    and objectproperty(i.object_id,'IsMSShipped')=0
                
    and i.index_id > 1 -- 0 indicates the heap   1 indicates the clustered index 
                and i.is_primary_key = 0 --  1 indicates the primary key
                and (s.user_seeks + s.user_scans + s.user_lookups)=0
        )a



    --查找未使用的表
    --
    This returns all the table that have not been used for any requests by users 
    --
    or the system from the time SQL Server is started.
        select object_name(i.object_idas tablename, i.name as clusteredindexname,
        
    case when i.index_id=0 then 'Heap Table'
            
    when i.index_id=1 then 'Clustered Table' end as TableType
        
    from sys.indexes i
        
    left outer join sys.dm_db_index_usage_stats s
            
    on s.object_id = i.object_id and s.index_id = i.index_id
            
    and s.database_id = db_id()
        
    where objectproperty(i.object_id'IsUserTable'= 1
            
    and objectproperty(i.object_id,'IsMSShipped')=0
            
    and i.index_id in (0,1-- 0 indicates the heap   1 indicates the clustered index     
            and s.object_id is null



    Please tell me if you find bugs.

    Thanks for reading,
    nzperfect


    作者:nzperfect
    出处:http://www.cnblogs.com/nzperfect/
    引用或者转载本BLOG的文章请注明原作者和出处,并保留原文章中的版权信息。

  • 相关阅读:
    网站性能优化分类总结
    关于高度塌陷问题解决方法
    语义化HTML
    CSS命名规范
    linux开机过程
    Linux--sed命令
    博客声明
    linux-- grep命令
    pyinstaller使用-python项目转换成exe可执行文件
    python导出开发环境
  • 原文地址:https://www.cnblogs.com/nzperfect/p/1700649.html
Copyright © 2011-2022 走看看