복합 인덱스
여러 컬럼을 조합한 인덱스입니다.
예시
-- 단일 인덱스
CREATE INDEX idx_name ON users(name);
-- 복합 인덱스
CREATE INDEX idx_name_age ON users(name, age);
복합 인덱스 구조
CREATE INDEX idx ON users(name, age);
인덱스 정렬 (name 먼저, 그 다음 age):
(강철수, 20)
(강철수, 25)
(강철수, 30)
(김영희, 22)
(김영희, 28)
(박민수, 21)
(박민수, 35)
첫 번째 컬럼으로 정렬 → 같으면 두 번째 컬럼으로 정렬
사용 가능한 쿼리
-- O 인덱스 사용
SELECT * FROM users WHERE name = '김영희';
SELECT * FROM users WHERE name = '김영희' AND age = 28;
SELECT * FROM users WHERE name = '김영희' AND age > 25;
-- X 인덱스 풀 스캔 (선두 컬럼 없음)
SELECT * FROM users WHERE age = 28;
핵심: 선두 컬럼 규칙
인덱스 (A, B, C) 일 때:
A로 검색 → O 레인지 스캔
A, B로 검색 → O 레인지 스캔
A, B, C로 검색 → O 레인지 스캔
B로 검색 → X 풀 스캔 (A 없음)
C로 검색 → X 풀 스캔 (A, B 없음)
B, C로 검색 → X 풀 스캔 (A 없음)
왼쪽부터 순서대로 있어야 인덱스를 효율적으로 씁니다.
왜 순서가 중요한가
인덱스 (name, age) 정렬 상태:
(강철수, 20)
(강철수, 25)
(김영희, 22) ← age=22가 여기에도
(박민수, 21)
(박민수, 35) ← age=22 근처가 아님
age만으로 검색하면 age 값이 흩어져 있어서 범위 특정이 불가능합니다.