SQL 인덱스(INDEX) 성능 향상을 위한 핵심 도구
인덱스(index)는 데이터베이스에서 검색 속도를 높이기 위한 핵심 기술입니다. 특히 테이블이 커질수록 그 효과는 더욱 커지며, 복잡한 쿼리의 성능을 크게 향상시킵니다. 하지만 잘못 사용하면 오히려 성능을 떨어뜨릴 수 있어 적절한 전략이 중요합니다.
📌 1. 인덱스란?
| 항목 | 설명 |
|---|---|
| 정의 | 테이블에서 지정된 컬럼의 값을 빠르게 찾기 위해 생성된 구조입니다. |
| 장점 | SELECT, WHERE, JOIN, ORDER BY의 속도 향상 |
| 단점 | INSERT, UPDATE, DELETE 시 성능 저하, 추가 저장 공간 사용 |
⚙️ 2. 인덱스 생성 방법
✅ 2.1. 일반 인덱스
CREATE INDEX 인덱스이름
ON 테이블이름 (필드1, 필드2, ...);
예시:
CREATE INDEX NameIdx ON Reservation(Name);
✅ 2.2. UNIQUE 인덱스 (중복 불가)
CREATE UNIQUE INDEX 인덱스이름
ON 테이블이름 (필드이름);
예시:
CREATE UNIQUE INDEX IdIdx ON Reservation(ID);
✅ 2.3. 정렬된 인덱스
CREATE INDEX NameDescIdx
ON Reservation(Name DESC);
ASC (오름차순), DESC (내림차순) 지정 가능
🔍 3. 인덱스 확인
SHOW INDEX FROM 테이블이름;
출력 예시 항목:
| 필드 | 설명 |
|---|---|
| Table | 테이블 이름 |
| Key_name | 인덱스 이름 |
| Non_unique | 0: 유일, 1: 중복 허용 |
| Column_name | 인덱스가 설정된 컬럼 이름 |
| Collation | A: 오름차순 |
| Cardinality | 유니크 값 개수 |
🧽 4. 인덱스 삭제
DROP INDEX 인덱스이름 ON 테이블이름;
예시:
DROP INDEX NameIdx ON Reservation;
🧠 5. 인덱스 활용 전략
✅ 5.1. 다중 컬럼 인덱스
CREATE INDEX MultiIdx ON Reservation(Name, RoomNum);
Name과 RoomNum의 조합으로 검색 성능 향상
✅ 5.2. 복합 조건 검색
SELECT *
FROM Reservation
WHERE Name = '홍길동' AND RoomNum = 201;
MultiIdx가 사용되어 빠른 결과 반환
📊 6. 인덱스의 장단점
| 장점 | 단점 |
|---|---|
| 검색 속도 향상 | 데이터 수정 시 인덱스도 갱신됨 |
| 테이블 크기가 클수록 효과 극대화 | 저장 공간 추가로 필요 |
| 복합 조건에서도 효율적 검색 가능 | 인덱스 남발 시 오히려 성능 저하 |
🔬 7. 실전 예제
🎯 7.1. 자주 검색되는 필드 인덱스
CREATE INDEX NameIdx ON Reservation(Name);
Name 필드의 검색 속도 향상
🎯 7.2. 중복 제거 + 검색 최적화
CREATE UNIQUE INDEX UniqueNameIdx ON Reservation(Name);
중복 방지 + SELECT DISTINCT 성능 향상
🎯 7.3. 다중 조건 검색 속도 개선
CREATE INDEX MultiIdx ON Reservation(Name, RoomNum);
SELECT * FROM Reservation
WHERE Name = '홍길동' AND RoomNum = 201;
📌 8. 요약
| 항목 | 설명 |
|---|---|
| 기능 | 쿼리 성능 향상 (검색, 정렬, 조인 등) |
| 생성 | CREATE [UNIQUE] INDEX 인덱스명 ON 테이블(컬럼) |
| 조회 | SHOW INDEX FROM 테이블명 |
| 삭제 | DROP INDEX 인덱스명 ON 테이블명 |
| 주의사항 | INSERT/UPDATE/DELETE 성능 저하 가능, 인덱스 남용 금지 |
질문 정리
❓ 인덱스를 어떤 필드에 걸어야 하나요?
→ WHERE, JOIN, ORDER BY, GROUP BY에 자주 사용되는 조회 조건 필드에 설정하세요.
❓ 인덱스를 너무 많이 만들면 어떤 문제가 생기나요?
→ INSERT/UPDATE/DELETE 성능이 심각하게 저하되고, 저장 공간도 많이 차지하게 됩니다.
❓ 유니크 인덱스와 PRIMARY KEY의 차이는?
→ 유사하지만 PRIMARY KEY는 NULL을 허용하지 않으며, 테이블당 하나만 존재합니다. UNIQUE는 여러 개 가능하며 NULL 허용.
댓글남기기