[개발] MSSQL에서 인덱스가 과도하게 많을 때의 문제

메이야 2026.09.03 21:43 댓글 0 조회 219
  • UPDATE/INSERT 성능 저하: 모든 인덱스가 갱신되어야 하므로, 단일 행 업데이트도 수십 개 인덱스를 동시에 수정 → 지연 발생.
  • 스토리지 낭비: 인덱스마다 별도의 페이지를 차지하므로 DB 크기가 커짐.
  • 통계 관리 부담: 인덱스가 많으면 통계 갱신 비용도 커져 옵티마이저가 잘못된 실행 계획을 선택할 가능성이 높음.
  • 중복 인덱스: 같은 컬럼 조합을 여러 인덱스가 커버하는 경우가 많아 불필요.


🛠️ 해결 방향

  1. 사용 빈도 확인 후 정리
SQL
SELECT OBJECT_NAME(s.object_id) AS TableName, i.name AS IndexName,
       user_seeks, user_scans, user_lookups, user_updates
FROM sys.dm_db_index_usage_stats s
JOIN sys.indexes i ON s.object_id = i.object_id AND s.index_id = i.index_id
WHERE OBJECT_NAME(s.object_id) = '[테이블명]';


  1. → user_seeks/scans/lookups가 거의 없고 user_updates만 많은 인덱스는 제거 후보.
  2. 중복 인덱스 제거
    • 같은 컬럼 조합을 가진 인덱스가 여러 개 있는지 확인.
    • 필요 없는 단일 컬럼 인덱스는 합쳐서 커버링 인덱스로 최적화.
  3. 자동 생성 인덱스 점검
    • 외래키, 유니크 제약 조건이 자동으로 인덱스를 만들 수 있음.
    • 불필요한 제약 조건이 걸려 있다면 제거 고려.
  4. 인덱스 리빌드/리오거나이즈
SQL
ALTER INDEX ALL ON News.NEWS REBUILD;

→ 파편화된 인덱스를 정리해 성능 개선.



✅ 결론

  • 사용되지 않는 인덱스를 정리하면 UPDATE 속도가 크게 개선될 것입니다.
  • 👉 추천드리는 첫 단계는 인덱스 사용 통계 조회 → 불필요 인덱스 제거입니다.
목록
댓글 0