Monday, October 31, 2011

Find Unsed Indexes




SELECT 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 

No comments:

Post a Comment