Basic Byte Bites

[MS-SQL, SQL Server] 비효율적인(사용량이 적은) 인덱스 찾기 본문

DataBase/MS_SQL

[MS-SQL, SQL Server] 비효율적인(사용량이 적은) 인덱스 찾기

MKJo 2025. 2. 25. 14:56

 

SELECT OBJECT_NAME(i.object_id) AS TableName, 
       i.name AS IndexName, 
       user_seeks, 
       user_scans, 
       user_lookups, 
       user_updates
FROM sys.indexes i
LEFT JOIN sys.dm_db_index_usage_stats us 
      ON i.object_id = us.object_id AND i.index_id = us.index_id
WHERE OBJECTPROPERTY(i.object_id, 'IsUserTable') = 1
ORDER BY user_updates DESC;

 

 

컬럼명 의미 인덱스 활용 방식
user_seeks 인덱스를 사용한 시크(Seek) 연산 횟수 인덱스 키를 활용한 특정 행 검색 (WHERE 절의 =, IN, BETWEEN 사용 시)
user_scans 인덱스를 사용한 스캔(Scan) 연산 횟수 전체 또는 부분 테이블 스캔 (WHERE 없이 조회 or 범위 조건)
user_lookups 클러스터형 인덱스 또는 힙(Heap) 테이블에서 추가 데이터 조회한 횟수 비클러스터 인덱스를 통해 조회 후, 룩업
user_updates 인덱스가 업데이트(INSERT, UPDATE, DELETE)된 횟수 데이터 변경 시 인덱스도 같이 수정되므로 부담이 될 수 있음

 

 

 

 

 

 


지표 의미 조치 방법
user_seeks ↑ 좋은 인덱스 활용 유지
user_scans ↑ 전체 테이블 스캔 많음 필요한 경우 추가 인덱스 생성
user_lookups ↑ 추가 조회 많음 (비효율적) INCLUDE 컬럼 추가 또는 클러스터형 인덱스 검토
user_updates ↑ 인덱스 유지 비용 큼 불필요한 인덱스 삭제 검토