WEB TIP/MS-SQL

사용하지 않는 인덱스 통계 찾기

제프 2007. 12. 4. 16:55
출처: DBGuide
다음 쿼리를 응용하시면 사용하지 않는 인덱스를 쉽게 찾아 낼 수 있습니다. 아래 쿼리는 적어도 최근 15일간 사용이 없는 인덱스와 통계를 찾아내는 쿼리입니다.

/*
     테이블별 인덱스에 대한 통계가 마지막으로 업데이트된 날짜 찾기
     이종희 2003.10.
     정원혁 2004.8.
*/
SELECT USER_NAME( OBJECTPROPERTY( i.id, 'OwnerID' ) ) AS Owner
     , OBJECT_NAME( i.id ) AS [Table]
     , i.name AS [Index]
     , CASE INDEXPROPERTY( i.id , i.name , 'IsClustered')  WHEN 1 THEN 'Y'  ELSE ''   END AS IsClustered
     , CASE INDEXPROPERTY( i.id , i.name , 'IsUnique'    )  WHEN 1 THEN 'Y'  ELSE ''   END AS IsUnique
     , STATS_DATE( i.id , i.indid ) AS LastUpdatedDate
     , dPages * 8. /1024 AS MB
  FROM sysindexes AS i
 WHERE OBJECTPROPERTY( i.id, 'IsMSShipped' ) = 0 
   AND 1 NOT IN (INDEXPROPERTY(i.id , i.name , 'IsStatistics')
                ,INDEXPROPERTY(i.id , i.name , 'IsAutoStatistics')
		,INDEXPROPERTY(i.id , i.name , 'IsHypothetical'))
   AND i.indid BETWEEN 1 And 250
-- AND dPages > 100 --작은 크기 테이블 무시
   AND (STATS_DATE( i.id , i.indid ) < getdate() - 15 --15일 이전까지도 업데이트 안된 것
    OR STATS_DATE( i.id , i.indid ) IS NULL) 
 ORDER BY Owner, [Table], [Index]