Zettelkasten

Index Intersection은 여러 단일 인덱스 결과를 조합한다

·수정 2026.04.23·수정 2

요약

  • 데이터베이스가 여러 단일 컬럼 인덱스를 동시에 사용하여 쿼리 결과를 찾는 최적화 기법
  • 복합 인덱스 없이도 다양한 쿼리 패턴에 유연하게 대응할 수 있다

본문

동작 원리

각 인덱스에서 조건에 맞는 PK(또는 row pointer)를 가져온 후, sorted merge 방식으로 교집합을 계산한다.

SELECT * FROM users WHERE age = 25 AND city = 'Seoul';
  • idx_age → age = 25인 row_id: {1, 3, 5, 7}
  • idx_city → city = 'Seoul'인 row_id: {3, 5, 8, 9}
  • 교집합: {3, 5} → 이 row들만 테이블에서 조회

장점

  • 유연성: 복합 인덱스는 컬럼 순서에 종속되지만, 단일 인덱스들은 어떤 조합으로든 사용 가능
  • 인덱스 저장 공간 절약
  • 쿼리 패턴이 다양하고 예측 불가능할 때 유리

단점

  • 복합 인덱스보다 일반적으로 느림 (두 인덱스 스캔 + 병합 비용)
  • 옵티마이저가 항상 선택하지 않음 (비용 계산에 따라 다름)
  • 각 인덱스 결과가 클수록 병합 비용 증가

vs Composite Index

구분 복합 인덱스 Index Intersection
성능 더 빠름 상대적으로 느림
유연성 컬럼 순서 고정 조합 자유로움
사용 시점 쿼리 패턴이 고정적일 때 쿼리 패턴이 다양할 때

확인 방법 (MySQL)

EXPLAIN SELECT * FROM users WHERE age = 25 AND city = 'Seoul';

type: index_merge, Extra: Using intersect(idx_age, idx_city) 출력 시 Index Intersection 사용 중

참고