정렬된 탐색 경로

인덱스는 읽기를 빠르게 하지만,
쿼리 순서와 맞아야 효과가 납니다.

전체를 훑는 대신 정렬된 경로를 타고 내려가며 찾습니다. 그래서 읽기는 빨라지지만, 조건이 인덱스 규칙을 벗어나면 DBMS는 다시 전체 탐색 쪽으로 기울 수 있습니다.

Full Table Scan O(N)

행을 처음부터 끝까지 확인

1,000만 건이면 최대 10,000,000번 비교

VS
Index Scan O(log N)

트리 경로를 따라 필요한 범위만 접근

1,000만 건이면 약 23단계 탐색

무슨 검색을 빠르게 하나

B+Tree
범위 검색과 정렬에 강함
가장 일반적인 기본 선택
Hash
같은 값 찾기 중심
= 비교에 적합
Clustered
행 자체가 인덱스 순서대로 저장
테이블당 1개
Covering
필요한 컬럼이 인덱스 안에 모두 있음
테이블 접근 생략

복합 인덱스는 순서가 규칙

1
선행 컬럼부터 사용

(a, b, c)라면 보통 a를 건너뛰고 b, c만 쓰기 어렵습니다.

2
등가 조건을 앞에, 범위 조건은 뒤에

정확히 좁힌 뒤 범위를 훑는 형태가 효율적입니다.

3
선택도가 높은 컬럼을 먼저

앞단에서 후보를 많이 줄일수록 뒤쪽 탐색 비용이 작아집니다.