Kullanılmayan Index’leri Bulun

Published on 11 October 2013 by in Index / Okunma: 1,625

0

Kontrolsüz büyüyen database’lerde çoğu zaman yetkisi olan developer anlık sorguları için de index oluşturabilirler. Zaman içerisinde bu index’lerin hangilerinin ne sıklıkla kullanıldığı ve hiç kullanılmadığının takibini yapmazlar. Durum bu şekilde olunca gereksiz, kullanılmayan size’ı büyüten index’leri saptayıp silmek isteriz. Bunun için aşağıda paylaştığım sorguyu kullanabilirsiniz.

SELECT ind.Index_id,
       obj.Name          AS TableName,
       ind.Name          AS IndexName,
       ind.Type_Desc,
       indUsage.user_seeks,
       indUsage.user_scans,
       indUsage.user_lookups,
       indUsage.user_updates,
       indUsage.last_user_seek,
       indUsage.last_user_scan,
       'DROP INDEX [' + ind.name + '] ON [' + obj.name + ']' AS DropCommand
FROM   sys.Indexes       AS ind
       JOIN sys.Objects  AS obj
            ON  ind.object_id = obj.Object_ID
       LEFT JOIN sys.dm_db_index_usage_stats indUsage
            ON  ind.object_id = indUsage.object_id
            AND ind.Index_id = indUsage.Index_id
WHERE  ind.type_desc <> 'HEAP'
       AND obj.type <> 'S'
       AND OBJECTPROPERTY(obj.object_id, 'isusertable') = 1
       AND (
               ISNULL(indUsage.user_seeks, 0) = 0
               AND ISNULL(indUsage.user_scans, 0) = 0
               AND ISNULL(indUsage.user_lookups, 0) = 0
           )
       AND ind.Type_Desc = 'NONCLUSTERED'
ORDER BY
       obj.name,
       ind.Name

 

Leave a Reply