첫 번째 컬럼을 기준으로 정렬되며 두 번째 컬럼 이후의 정렬은 첫 번째 컬럼 값이 동일한 레코드에 대해서만 의미가 있음
주의사항
- 범위 조건을 사용하는 경우 첫 번째 컬럼이 적용되면 두 번째 컬럼 이후의 인덱스는 사용되지 않음
## 인덱스: (name, age)
# 인덱스를 활용하지 못하는 경우
SELECT * FROM employee WHERE age = 30;
# 인덱스를 활용하는 경우
SELECT * FROM employee WHERE name = 'John' AND age = 30;
# 인덱스를 제한적으로 활용하는 경우
SELECT * FROM employee WHERE name BETWEEN 'Lemon' AND 'Mango' AND age = 30;
- 첫 번째 컬럼(name)이 범위 조건이 아니면 인덱스가 첫 번째 + 두 번째 컬럼을 모두 활용하여 탐색
- 하지만 첫 번째 컬럼(name)이 범위 조건을 가지면 두 번째 컬럼은 단순한 필터링 단계에서 사용됨
선행 컬럼 선정 기준
- 항상(빈번하게) 사용하는가
- 항상 '='로 사용하는가
- 어느 것이 더 좋은 분포도 값을 가지는가
- 분포도의 값이 낮으면서(같은 값이 적으면서) 데이터가 일정하게 분포되어 있는지
- 자주 정렬되는 순서는 무엇인가
- 부가적으로 추가시킬 컬럼은 어떤 것으로 할 것인가
728x90
반응형
'DB' 카테고리의 다른 글
Partitioning (0) | 2025.01.18 |
---|---|
B+Tree, B-Tree (0) | 2025.01.17 |
Index Range Scan (0) | 2025.01.16 |
Index의 랜덤 I/O와 순차 I/O (0) | 2025.01.16 |
Database Index (0) | 2025.01.15 |