optimize_trivial_approximate_count_query
- 0 — 최적화가 비활성화됩니다.
- 1 — 최적화가 활성화됩니다.
optimize_trivial_count_query
SELECT count() FROM table 쿼리를 최적화하는 기능을 활성화하거나 비활성화합니다. 행 수준 보안(row-level security)을 사용해야 하는 경우 이 설정을 비활성화하십시오.
가능한 값:
- 0 — 최적화가 비활성화됩니다.
- 1 — 최적화가 활성화됩니다.
optimize_trivial_count_with_sparsity_filter
SELECT count() FROM t WHERE col <op> const 형태의 쿼리까지 확장합니다. 여기서 <op> const는
행을 col의 기본값과 비기본값으로 정확히 구분해야 합니다. 그러면 count 값은
MergeTree가 이미 serialization.json에 유지하는 컬럼별 num_defaults / num_rows
카운터에서 데이터 스캔 없이 바로 처리됩니다.
인식되는 패턴:
Int*/UInt*,String/FixedString,Date/DateTime/DateTime64,Decimal*,UUID,IPv4/IPv6타입의col = default(col)/col != default(col).Nullable컬럼의IS NULL/IS NOT NULL.String컬럼의empty(col)/notEmpty(col).Bool컬럼의col = true/col != true.- 부호 없는 정수 컬럼의
col > 0,col >= 1,col < 1,col <= 0. Int*,UInt*,Bool컬럼의 단독col/NOT col(truthy 검사).
Float*, Enum*, Nullable, LowCardinality,
또는 복합 타입(Tuple, Array, Map, …)에는 적용되지 않습니다. 이러한 타입에서는 count가
일반 스캔 경로로 처리됩니다.
이 기능이 적용되려면 파트별 num_defaults 카운터가 정확해야 합니다. 대상 테이블에서
삽입과 머지 전에 MergeTree 테이블 설정 compute_exact_num_defaults_for_sparse_columns을
활성화하십시오. 이 설정 없이 기록된 파트는 재작성에서 자동으로 제외되므로,
optimize_trivial_count_with_sparsity_filter만 활성화해서는 충분하지 않습니다.
Nullable 컬럼의 IS NULL / IS NOT NULL 패턴의 경우, 해당 컬럼에는 추가로
serialization.json에 num_defaults 항목이 있어야 합니다. 이는 삽입 /
머지 시점에 MergeTree 테이블 설정 nullable_serialization_version이 allow_sparse로 설정된 경우에만 생성됩니다.
기본값 basic에서는 Nullable 컬럼에 컬럼별 항목이 생성되지 않으므로
이 최적화는 자동으로 적용되지 않습니다.
가능한 값:
- 0 — 최적화가 비활성화됩니다.
- 1 — 최적화가 활성화됩니다.
optimize_trivial_group_by_limit_query
max_rows_to_group_by = n + offset 및 group_by_overflow_mode = 'any'를 설정하여 단순한 쿼리 SELECT key_expr FROM table GROUP BY key_expr LIMIT n의 최적화를 활성화하거나 비활성화합니다. 여기서 단순한 쿼리란 SELECT 항목에 집계 함수가 없고, HAVING/ORDER BY/LIMIT BY/윈도우 절이 없으며, GROUP BY 수정자도 없는 쿼리를 의미합니다. n + offset개의 고유 키가 생성되면 집계가 중지됩니다.
사용자가 group_by_overflow_mode를 any가 아닌 값으로 명시적으로 설정한 경우(명시한 throw/break 동작을 유지하기 위해), 또는 이미 더 엄격한 max_rows_to_group_by를 설정한 경우(이 최적화는 no-op이므로)에는 이 최적화가 적용되지 않습니다.
가능한 값:
- 0 — 최적화가 비활성화됩니다.
- 1 — 최적화가 활성화됩니다.