인덱스 선택

인덱스 선택 (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 세그먼트 정렬 순서가 공통 필터와 일치할 때 유용.

인덱스 구성 전 확인할 것

  1. 쿼리의 정확한 WHERE, GROUP BY, 함수 패턴 확인
  2. 컬럼이 사전 인코딩, 단일 값, 다중 값, 또는 JSON인지 확인
  3. 인덱스를 현재 테이블 구성 스타일로 표현할 수 있는지 확인
  4. 인덱스가 새 세그먼트에만 존재해야 하는지, 기존 세그먼트에 리로드되어야 하는지 결정

테이블 수준 구성 세부 사항은 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 쿼리 패턴을 보통 가장 잘 맞는 인덱스에 매핑하고, 테이블 구성 변경 전에 해야 할 확인을 강조했어요.

다음 단계

튜닝 중인 워크로드에 대한 특정 인덱스 페이지를 열고, 이를 그 워크로드의 테이블 구성 및 쿼리 예시와 비교하세요.

관련 페이지

더 알아보기 (Learn more)