복합 인덱스

여러 컬럼을 조합한 인덱스입니다.


예시

-- 단일 인덱스
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 값이 흩어져 있어서 범위 특정이 불가능합니다.

CSLOG에서 보기