각 섹션에서는 샘플 데이터가 포함된 예시를 제공하고, 쿼리 실행 중 인덱스 사용 여부를 확인하는 방법을 보여줍니다.
MinMax 인덱스
minmax 인덱스는 느슨하게 정렬된 데이터나 ORDER BY와 연관성이 있는 컬럼에 대한 범위 프레디케이트에 가장 적합합니다.
EXPLAIN과 프루닝을 사용하는 예시를 확인하십시오.
Set 인덱스
set 인덱스를 사용하십시오. 각 블록에 서로 다른 값이 많으면 효과가 없습니다.
전문 검색용 Text index (text)
text는 토큰화된 텍스트 데이터에 대한 역 인덱스입니다.
전문 검색 워크로드를 위해 특별히 설계되었으며, 토큰과 용어를 효율적이고 결정론적으로 조회할 수 있습니다.
자연어 또는 대규모 텍스트 검색 사용 사례에 권장됩니다.
자세한 내용과 예시는 Text index를 사용한 전문 검색를 참조하십시오.
일반 블룸 필터 (스칼라)
bloom_filter 인덱스는 “건초더미에서 바늘 찾기”와 같은 동등 비교/IN 멤버십 검사에 적합합니다. 선택적 매개변수로 거짓 양성률(false-positive rate)을 지정할 수 있으며, 기본값은 0.025입니다.
부분 문자열 검색용 N-gram Bloom filter (ngrambf_v1) (Deprecated)
ClickHouse 버전
>= 26.2에서는 전문 검색에 ngrambf_v1 인덱스를 사용하는 방식이 더 이상 권장되지 않으며, 대신 text 인덱스를 사용합니다(자세한 내용은 여기를 참조하십시오).ngrambf_v1 인덱스는 문자열을 n-그램으로 분할합니다. LIKE '%...%' 쿼리에 효과적입니다. String/FixedString/Map (mapKeys/mapValues를 통해)를 지원하며, 크기, 해시 개수, 시드도 조정할 수 있습니다. 자세한 내용은 N-gram bloom filter 문서를 참조하십시오.
단어 기반 검색용 Token 블룸 필터(tokenbf_v1) (지원 중단)
ClickHouse 버전
>= 26.2에서는 전문 검색에 tokenbf_v1 인덱스를 사용하는 방식이 지원 중단되었으며, 대신 text 인덱스 사용이 권장됩니다(자세한 내용은 여기를 참조하십시오).tokenbf_v1 인덱스는 영숫자가 아닌 문자를 구분자로 사용해 분리된 토큰을 인덱싱합니다. hasToken, LIKE 단어 패턴, 또는 등호 비교/IN과 함께 사용해야 합니다. String/FixedString/Map 타입을 지원합니다.
자세한 내용은 Token bloom filter 및 Bloom filter types 페이지를 참조하십시오.
CREATE TABLE 시 인덱스 추가(여러 예시)
Map/Tuple/Nested 타입도 지원합니다. 이는 아래 예시에서 보여줍니다:
기존 데이터에 구체화 적용 및 확인
MATERIALIZE를 사용해 기존 데이터 파트에 인덱스를 적용하고, EXPLAIN 또는 트레이스 로그로 프루닝을 확인할 수 있습니다:
스킵 인덱스를 사용할 때와 피해야 할 때
- 필터 값이 데이터 블록 내에 희소하게 분포하는 경우
ORDER BY컬럼과 강한 상관관계가 있거나, 데이터 수집 패턴상 비슷한 값이 함께 모이도록 구성된 경우- 대규모 로그 데이터셋에서 텍스트 검색을 수행하는 경우 (
ngrambf_v1/tokenbf_v1타입)
- 대부분의 블록에 일치하는 값이 하나 이상 포함되어 있을 가능성이 높은 경우 (어차피 블록을 읽게 됨)
- 데이터 정렬과 상관관계가 없는 고카디널리티 컬럼으로 필터링하는 경우
중요한 고려 사항값이 데이터 블록에 한 번이라도 나타나면 ClickHouse는 해당 블록 전체를 읽어야 합니다. 실제에 가까운 데이터셋으로 인덱스를 테스트하고, 실제 성능 측정 결과를 바탕으로 세분화 수준과 타입별 매개변수를 조정하십시오.
일시적으로 인덱스를 무시하거나 강제로 적용
ignore_data_skipping_indices를 참조하십시오.
참고 사항 및 주의점
- 스킵 인덱스는 MergeTree 계열 테이블에서만 지원되며, 프루닝은 그래뉼/블록 수준에서 이루어집니다.
- 블룸 필터 기반 인덱스는 확률적 특성이 있으므로, 거짓 양성으로 인해 추가 읽기가 발생할 수 있지만 유효한 데이터가 스킵되지는 않습니다.
- 블룸 필터와 기타 스킵 인덱스는
EXPLAIN및 tracing으로 검증해야 하며, 프루닝과 인덱스 크기 사이의 균형을 맞출 수 있도록 세분화 수준을 조정해야 합니다.