2 분 소요

인덱스(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 허용.

카테고리:

업데이트:

댓글남기기