【发布时间】:2017-04-22 14:18:12
【问题描述】:
SELECT Db_name(database_id) Database_Name
,o.NAME
,indexname = i.NAME
,i.index_id
,reads = user_seeks + user_scans + user_lookups
,writes = user_updates
,rows = (SELECT Sum(p.rows)
FROM sys.partitions p
WHERE p.index_id = s.index_id
AND s.object_id = p.object_id)
,CASE
WHEN s.user_updates < 1 THEN 100
ELSE 1.00 * ( s.user_seeks + s.user_scans + s.user_lookups ) /
s.user_updates
END AS reads_per_write
,'DROP INDEX ' + Quotename(i.NAME) + ' ON '
+ Quotename(c.NAME) + '.'
+ Quotename(Object_name(s.object_id)) AS 'drop statement'
FROM sys.dm_db_index_usage_stats s
INNER JOIN sys.indexes i
ON i.index_id = s.index_id
AND s.object_id = i.object_id
INNER JOIN sys.objects o
ON s.object_id = o.object_id
INNER JOIN sys.schemas c
ON o.schema_id = c.schema_id
WHERE Objectproperty(s.object_id, 'IsUserTable') = 1
AND s.database_id = Db_id()
AND i.type_desc = 'nonclustered'
AND i.is_primary_key = 0
AND i.is_unique_constraint = 0
AND (SELECT Sum(p.rows)
FROM sys.partitions p
WHERE p.index_id = s.index_id
AND s.object_id = p.object_id) > 10000
ORDER BY reads_per_write ASC
【问题讨论】:
-
试试
sp_MSforeachdb或Making a more reliable and flexible sp_MSforeachdb -
感谢您的建议,您是否介意重写代码