2010-03-01 6 views

답변

7

이 같은 sys.dm_db_index_usage_stats 동적 관리 뷰를 쿼리의 결과를 확인 시도해 볼 수도 있습니다 :이의 last_user_seek 같은 것들을 돌아 스캔하고 테이블에 인덱스의 업데이트 날짜합니다

SELECT * 
FROM sys.dm_db_index_usage_stats 
WHERE [database_id] = DB_ID() 
    AND [object_id] = OBJECT_ID('TableName') 

.

서버를 다시 시작할 때 동적 관리보기에 대한 통계가 재설정되므로주의하십시오. 서버가 실행되는 시간이 길수록 레코드에 활동이없는 경우 더 많은 확신을 가질 수 있습니다.

개인적으로도 문제의 테이블에 대한 참조를 확인하기 위해 모든 소스 코드를 확인해야하고, (이 작업을 수행 할 SQL Search from Red Gate을 사용할 수 있습니다 - 그것은 무료)도 참조에 대한 모든 sprocs가/UDF를 검색하는 것

+0

이것은 정확히 내가 찾고있는 것입니다. 감사! :영형) –

0

응용 프로그램 및/또는 회사에서 이것이 중요하고 테이블이 올바르게 설계된 경우 각 테이블에는 'LastModifiedTime'과 같은 이름의 열이 있어야합니다. 이 테이블을 쿼리하여 쓸모없는 테이블을 결정할 수 있습니다.

+0

불행히도 초기 데이터베이스를 설계하지 않았습니다. 그래서 sys 데이터베이스 테이블에 테이블이 더 이상 사용되지 않거나 잠시 동안 사용되지 않았 음을 알기 위해 쿼리 할 수있는 것이 있는지 궁금합니다. –

1

하는 경우 누구나 데이터베이스에서 사용되지 않는 테이블을 모두 찾고 있는데 (질문 본문보다 제목 요청이 많음) this guy은 데이터베이스에서 변경되지 않은 테이블을 가져 오는 좋은 쿼리를 가지고 있습니다. 이 경우 "변경되지 않음"은 sys.dm_db_index_usage_stats에 항목이없는 테이블입니다 (AdaTheDev의 답변과 마찬가지로 마지막 SQL Server 재부팅 이후에만).

SELECT OBJECTNAME = Object_name(I.object_id), 
     INDEXNAME = I.name, 
     I.index_id 
FROM sys.indexes AS I 
     INNER JOIN sys.objects AS O 
       ON I.object_id = O.object_id 
WHERE Objectproperty(O.object_id, 'IsUserTable') = 1 
     AND I.index_id NOT IN (SELECT S.index_id 
           FROM sys.dm_db_index_usage_stats AS S 
           WHERE S.object_id = I.object_id 
            AND I.index_id = S.index_id 
            AND database_id = Db_id(Db_name())) 
ORDER BY objectname, 
      I.index_id, 
      indexname ASC 
관련 문제