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
'Database > MSSQL' 카테고리의 다른 글
| MSSQL SELECT 문 기본 사용법과 WHERE 절 활용 (0) | 2025.05.20 |
|---|---|
| MSSQL 테이블 간 관계 설정과 조인(Join) 활용법 (0) | 2025.05.19 |
| MSSQL 기본 키(Primary Key)와 외래 키(Foreign Key) 설정 방법 (0) | 2025.05.17 |
| MSSQL DROP TABLE 제대로 사용하기 (0) | 2025.05.16 |
| MSSQL ALTER TABLE 완벽 가이드 (0) | 2025.05.15 |