인덱스 선택
인덱스 선택 (Choosing Indexes)
쿼리 패턴, 데이터 형태, 워크로드로 올바른 Pinot 인덱스를 고르세요.
출처: 문서
본문
쿼리 형태를 알고 실용적인 권장이 필요할 때 이 가이드를 사용하세요.
목표는 가능한 모든 인덱스를 활성화하는 것이 아니에요. 목표는 테이블 구성을 가장 중요한 쿼리와 맞춰 유지하는 것이에요.
결정 가이드 (Decision guide)
| 쿼리 패턴 또는 워크로드 | 시작점 | 이유 |
|---|---|---|
WHERE userId = '...' 같은 등식 필터 |
Inverted index | 빠른 포인트 조회와 선택적 필터링. |
작은 값 집합에 대한 IN 필터 |
Inverted index | 세그먼트 내 효율적인 멤버십 테스트. |
| 경계가 있는 숫자 또는 시간 필터 | Range index | 값 구간에 대해 전체 스캔보다 나음. |
| 접두사, 구문, 또는 토큰 검색 | Text search support | 검색 스타일 조건자를 위해 설계됨. |
| 중첩 JSON 조건자 | JSON index | JSON 필드 필터링을 인덱스로 푸시. |
| 거리 또는 포함(containment) 쿼리 | Geospatial support | 지리 데이터에 대한 공간 워크로드 지원. |
반복되는 GROUP BY 및 집계 쿼리 |
Star-tree index | 알려진 쿼리 형태를 사전 집계. |
| 임베딩 유사성 검색 | Vector index | 근사 최근접 이웃(AE) 조회 지원. |
| 안정적인 정렬 키 조회 | Sorted forward index | 세그먼트 정렬 순서가 공통 필터와 일치할 때 유용. |
인덱스 구성 전 확인할 것
- 쿼리의 정확한
WHERE,GROUP BY, 함수 패턴 확인 - 컬럼이 사전 인코딩, 단일 값, 다중 값, 또는 JSON인지 확인
- 인덱스를 현재 테이블 구성 스타일로 표현할 수 있는지 확인
- 인덱스가 새 세그먼트에만 존재해야 하는지, 기존 세그먼트에 리로드되어야 하는지 결정
테이블 수준 구성 세부 사항은 Table을, 수집 파이프라인에 인덱스를 적용하는 종단간 예시는 Configure indexes를 사용하세요.
쿼리 검증 예시
인덱스 선택을 검증한다면 쿼리 자체를 단순하고 대표적으로 유지하세요.
SELECT COUNT(*)
FROM events
WHERE userId = 'u123'
SELECT campaign, SUM(impressions)
FROM events
WHERE eventDate BETWEEN 20240301 AND 20240331
GROUP BY campaign
SELECT title
FROM documents
WHERE TEXT_MATCH(title, 'pinot query engine')
SELECT id
FROM embeddings
WHERE VECTOR_SIMILARITY(embedding, ARRAY[0.12, 0.18, 0.33], 10)
구성 스타일
인덱스가 지원할 때는 fieldConfigList의 현대적 컬럼 수준 구성을 선호하세요. 레거시 테이블 수준 설정은 이전 테이블을 유지하거나 마이그레이션 경로를 따를 때만 사용하세요.
기존 테이블에서 인덱스를 변경해야 한다면 변경이 증분적으로 적용될 수 있는지, 세그먼트를 리로드해야 하는지를 확인하세요.
이 페이지가 다룬 내용
이 페이지는 일반적인 Pinot 쿼리 패턴을 보통 가장 잘 맞는 인덱스에 매핑하고, 테이블 구성 변경 전에 해야 할 확인을 강조했어요.
다음 단계
튜닝 중인 워크로드에 대한 특정 인덱스 페이지를 열고, 이를 그 워크로드의 테이블 구성 및 쿼리 예시와 비교하세요.