본문 바로가기
DB

Multi-column Index

by kiwi_wiki 2025. 1. 16.

첫 번째 컬럼을 기준으로 정렬되며 두 번째 컬럼 이후의 정렬은 첫 번째 컬럼 값이 동일한 레코드에 대해서만 의미가 있음

주의사항

  • 범위 조건을 사용하는 경우 첫 번째 컬럼이 적용되면 두 번째 컬럼 이후의 인덱스는 사용되지 않음
## 인덱스: (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