国内最全IT社区平台 联系我们 | 收藏本站
华晨云阿里云优惠2
您当前位置:首页 > 数据库 > Sqlserver > SQL Server 查找未使用的非聚集索引和表

SQL Server 查找未使用的非聚集索引和表

来源:程序员人生   发布时间:2013-11-01 21:44:10 阅读次数:2710次

查找未使用的非聚集索引和未使用的表.

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.

--查找未使用的非聚集索引(排除聚集索引和堆表)
--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.
-- nzperfect
select tablename,indexname,'drop index '+tablename+'.'+indexname as dropIndexCommand
from
(
select object_name(i.object_id) as 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_id) as 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.
--nzperfect
select object_name(i.object_id) as 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

生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠
程序员人生
------分隔线----------------------------
分享到:
------分隔线----------------------------
关闭
程序员人生