본문 바로가기
Database/MSSQL

MSSQL 인덱스(Index)의 종류와 생성 방법

by yazasus 2025. 5. 18.
728x90

MSSQL 인덱스(Index) 종류와 생성 방법 – 쿼리 성능을 높이는 핵심 가이드

인덱스(Index)는 SQL Server에서 검색 속도 향상과 정렬 성능 개선을 위해 사용하는 데이터베이스 객체입니다.
테이블의 특정 열에 대한 조회 성능을 높이고, WHERE 조건, JOIN, ORDER BY 성능에도 큰 영향을 줍니다.

---

1. 인덱스의 종류

① 클러스터드 인덱스 (Clustered Index)

  • 테이블의 물리적 정렬 순서를 결정하는 인덱스
  • 한 테이블에 **1개만 생성 가능**
  • 기본 키(PK)가 있을 경우 자동 생성되는 경우가 많음

② 넌클러스터드 인덱스 (Non-Clustered Index)

  • 테이블과는 별도의 구조로 저장되며, **다중 생성 가능**
  • 클러스터드 인덱스를 기반으로 데이터를 참조

③ 유니크 인덱스 (Unique Index)

  • 열 값의 중복을 허용하지 않음
  • 기본 키 외에 고유한 값을 유지하고자 할 때 사용

④ 포함 열 인덱스 (Included Columns)

  • WHERE 조건에는 없지만 SELECT 대상이 되는 열을 인덱스에 포함시켜 커버링 인덱스를 구성
  • 데이터 조회 시 테이블 액세스 없이 인덱스만으로 결과 반환 가능

---

2. 인덱스 생성 방법

▶ 클러스터드 인덱스 생성


CREATE CLUSTERED INDEX IX_Users_UserName
ON Users(UserName);

▶ 넌클러스터드 인덱스 생성


CREATE NONCLUSTERED INDEX IX_Users_Email
ON Users(Email);

▶ 유니크 인덱스 생성


CREATE UNIQUE INDEX IX_Users_Email
ON Users(Email);

▶ 포함 열 인덱스 생성 (INCLUDE)


CREATE NONCLUSTERED INDEX IX_Orders_UserId
ON Orders(UserId)
INCLUDE(OrderDate, TotalAmount);

→ 이 인덱스는 WHERE 조건에는 UserId만 사용하고, SELECT 절에는 OrderDate, TotalAmount가 포함될 때 효과적입니다.

---

3. 인덱스 삭제

인덱스를 삭제할 때는 다음과 같이 이름을 지정하여 삭제합니다:


DROP INDEX IX_Users_Email ON Users;

---

4. 인덱스 조회 및 확인

현재 테이블에 어떤 인덱스가 설정되어 있는지 확인하는 쿼리는 다음과 같습니다:


SELECT name, type_desc, is_unique
FROM sys.indexes
WHERE object_id = OBJECT_ID('Users');

---

5. 실무 팁 💡

  • 인덱스는 읽기 속도를 빠르게 하지만, 쓰기 작업(INSERT, UPDATE, DELETE)의 부하를 증가시킬 수 있습니다.
  • 조회가 많은 컬럼, WHERE 또는 JOIN에 자주 사용되는 컬럼 위주로 인덱스를 설계하세요.
  • 커버링 인덱스(INCLUDE)는 성능 개선에 매우 효과적이지만, 무분별한 사용은 오히려 부작용을 일으킬 수 있습니다.
  • 실행 계획(Estimated Execution Plan)을 통해 쿼리가 인덱스를 사용하는지 항상 확인하세요.

---

마무리

인덱스는 쿼리 성능을 좌우하는 핵심 요소입니다.
각 인덱스의 특성과 용도를 명확히 이해하고, 조회 패턴에 맞게 설계하면 성능 최적화에 큰 도움이 됩니다.
단, 인덱스는 많을수록 좋은 것이 아니며, 상황에 따라 신중한 설계가 필요합니다.

728x90