optimize_aggregators_of_group_by_keys
SELECT 절에서 GROUP BY 키의 min/max/any/anyLast 집계 함수를 제거합니다optimize_append_index
인덱스 조건을 추가하려면 제약 조건을 사용합니다. 기본값은false입니다.
가능한 값:
- true, false
optimize_arithmetic_operations_in_aggregate_functions
산술 연산을 집계 함수 외부로 이동합니다optimize_const_name_size
큰 상수는 스칼라로 대체하고 이름으로 hash를 사용합니다(크기는 이름 길이를 기준으로 추정됨). 가능한 값:- 양의 정수 - 이름의 최대 길이,
- 0 — 항상,
- 음의 정수 - 절대 사용 안 함.
optimize_count_from_files
서로 다른 입력 형식의 파일에서 행 수를 계산하는 최적화 기능을 활성화하거나 비활성화합니다. 이 설정은 테이블 함수/엔진file/s3/url/hdfs/azureBlobStorage에 적용됩니다.
가능한 값:
- 0 — 최적화가 비활성화됩니다.
- 1 — 최적화가 활성화됩니다.
optimize_dictget_tuple_element
불필요한 딕셔너리 속성 조회를 피하기 위해tupleElement(dictGet('dict', ('a', 'b', 'c'), key), 2)를 dictGet('dict', 'b', key)로 재작성합니다. 위치 기반(.1, .2, …) 및 이름 기반(.b) 접근을 지원하며, 기본값 인수가 상수 Tuple 또는 상수들로 이루어진 tuple(...)인 경우에는 dictGetOrDefault에도 적용됩니다.
optimize_distinct_in_order
DISTINCT에 포함된 일부 컬럼이 정렬의 접두사를 이루는 경우 DISTINCT 최적화를 활성화합니다. 예를 들어 MergeTree의 정렬 키(sorting key) 접두사나 ORDER BY 문의 접두사가 이에 해당합니다.optimize_distributed_group_by_sharding_key
비용이 많이 드는 시작 서버(initiator server)에서의 집계를 피하여GROUP BY sharding_key 쿼리를 최적화합니다(이에 따라 시작 서버에서 해당 쿼리의 메모리 사용량이 줄어듭니다).
다음 유형의 쿼리가 지원됩니다(및 이들의 모든 조합):
SELECT DISTINCT [..., ]sharding_key[, ...] FROM distSELECT ... FROM dist GROUP BY sharding_key[, ...]SELECT ... FROM dist GROUP BY sharding_key[, ...] ORDER BY xSELECT ... FROM dist GROUP BY sharding_key[, ...] LIMIT 1SELECT ... FROM dist GROUP BY sharding_key[, ...] LIMIT 1 BY x
SELECT ... GROUP BY sharding_key[, ...] WITH TOTALSSELECT ... GROUP BY sharding_key[, ...] WITH ROLLUPSELECT ... GROUP BY sharding_key[, ...] WITH CUBESELECT ... GROUP BY sharding_key[, ...] SETTINGS extremes=1
- 0 — 비활성화됨.
- 1 — 활성화됨.
현재는
optimize_skip_unused_shards가 필요합니다(이유는 언젠가 이 설정이 기본적으로 활성화될 수 있고, 데이터가 Distributed 테이블을 통해 삽입되어 sharding_key에 따라 분산된 경우에만 올바르게 동작하기 때문입니다).optimize_dry_run_check_part
활성화하면OPTIMIZE ... DRY RUN이 checkDataPart를 사용해 최종적으로 병합된 파트를 검증합니다. 검증에 실패하면 예외가 발생합니다.
optimize_empty_string_comparisons
col = '' 또는 '' = col과 같은 표현식은 empty(col)로, col != '' 또는 '' != col과 같은 표현식은 notEmpty(col)로 변환합니다.
이는 col이 String 또는 FixedString 타입인 경우에만 적용됩니다.
optimize_extract_common_expressions
WHERE, PREWHERE, ON, HAVING 및 QUALIFY 표현식의 OR 결합에서 공통 표현식을 추출할 수 있도록 허용합니다.(A AND B) OR (A AND C)와 같은 논리 표현식은 A AND (B OR C)로 재작성될 수 있으며, 이는 다음 최적화에 도움이 될 수 있습니다.
- 단순한 필터링 표현식에서 인덱스 활용
- cross를 inner join으로 최적화
optimize_functions_to_subcolumns
일부 함수를 서브컬럼을 읽는 방식으로 변환하는 최적화를 활성화하거나 비활성화합니다. 이로써 읽어야 하는 데이터 양을 줄일 수 있습니다. 다음 함수는 변환할 수 있습니다:- length를 size0 서브컬럼을 읽도록 변환합니다.
- empty를 size0 서브컬럼을 읽도록 변환합니다.
- notEmpty를 size0 서브컬럼을 읽도록 변환합니다.
- isNull을 null 서브컬럼을 읽도록 변환합니다.
- isNotNull을 null 서브컬럼을 읽도록 변환합니다.
- count를 null 서브컬럼을 읽도록 변환합니다.
- mapKeys를 keys 서브컬럼을 읽도록 변환합니다.
- mapValues를 values 서브컬럼을 읽도록 변환합니다.
Map에 대한 has 및 notHas를 keys 서브컬럼을 읽도록 변환합니다.- mapContainsKeyLike를 keys 서브컬럼을 읽도록 변환합니다.
- mapContainsValueLike를 values 서브컬럼을 읽도록 변환합니다.
- 0 — 최적화가 비활성화됩니다.
- 1 — 최적화가 활성화됩니다.
optimize_inverse_dictionary_lookup
미리 계산된 가능한 키 값 집합을 더 빠르게 조회해 반복적인 역방향 딕셔너리 조회를 피합니다.optimize_multiif_to_if
조건이 하나뿐인multiIf를 if로 대체합니다.
optimize_mutations_with_partition_pruning
이 설정을 활성화하면 ClickHouse는ReplicatedMergeTree 계열 테이블에 대한 ALTER TABLE UPDATE/DELETE 뮤테이션과 경량 UPDATE/DELETE 문의 WHERE 절에서 파티션 키 조건을 자동으로 감지하여, 전체 파티션이 아니라 영향을 받는 파티션만 처리합니다.
이 자동 프루닝은 현재 복제된 테이블에만 적용됩니다. 복제되지 않은 MergeTree 테이블에서는 명시적으로 IN PARTITION 절을 사용하여 뮤테이션 대상을 특정 파티션으로 제한하십시오.
가능한 값:
- 0 — 비활성화. 뮤테이션과 경량 업데이트가 모든 파티션을 처리합니다.
- 1 — 활성화. 뮤테이션과 경량 업데이트가 WHERE 조건에 일치하는 파티션만 처리합니다.
optimize_normalize_count_variants
기본적으로 count()와 의미상 동일한 집계 함수를 count()로 재작성합니다.optimize_on_insert
삽입 전에 데이터 변환을 활성화하거나 비활성화합니다. 테이블 엔진에 따라 이 블록에서 머지가 수행된 것처럼 변환이 적용됩니다. 가능한 값:- 0 — 비활성화됨.
- 1 — 활성화됨.
optimize_prewhere_after_pushdown
후속 쿼리 계획 최적화로MergeTree 읽기 단계 위에 추가 필터가 배치될 수 있는 경우(예: JOIN을 통한 프레디케이트 pushdown, projection 재작성), 그 이후 두 번째 PREWHERE 승격 패스를 실행합니다. 기존 PREWHERE가 이미 있으면 새 필터는 별도의 필터 단계로 남지 않고 여기에 AND로 병합됩니다.
optimize_qbit_distance_function_reads
QBit 데이터 타입의 거리 함수를 저장소에서 계산에 필요한 컬럼만 읽는 동등한 함수로 대체합니다.
optimize_read_in_order
MergeTree 테이블에서 데이터를 읽을 때 SELECT 쿼리의 ORDER BY 최적화를 활성화합니다. 가능한 값:- 0 —
ORDER BY최적화가 비활성화됩니다. - 1 —
ORDER BY최적화가 활성화됩니다.
optimize_read_in_reverse_order_final
ReplacingMergeTree 테이블에 대해FINAL 수정자를 사용하는 SELECT 쿼리에서 정렬 키의 역순으로 데이터를 읽을 수 있도록 합니다. optimize_read_in_order도 함께 활성화된 경우에만 적용됩니다.
가능한 값:
- 0 —
FINAL을 사용한 역순 읽기가 비활성화됩니다. - 1 —
FINAL을 사용한 역순 읽기가 활성화됩니다.
optimize_respect_aliases
true로 설정하면 WHERE/GROUP BY/ORDER BY에서 별칭을 반영하므로, 파티션 프루닝/보조 인덱스/optimize_aggregation_in_order/optimize_read_in_order/optimize_trivial_count 최적화에 도움이 됩니다.optimize_sorting_by_input_stream_properties
입력 스트림의 정렬 속성을 기준으로 정렬을 최적화합니다optimize_substitute_columns
컬럼 치환에 제약 조건를 사용합니다. 기본값은false입니다.
가능한 값:
- true, false
optimize_syntax_fuse_functions
동일한 인수를 사용하는 집계 함수를 결합할 수 있도록 합니다. 동일한 인수를 사용하는 sum, count 또는 avg 집계 함수가 2개 이상 포함된 쿼리를 sumCount로 재작성합니다. 가능한 값:- 0 — 동일한 인수를 사용하는 함수는 결합되지 않습니다.
- 1 — 동일한 인수를 사용하는 함수는 결합됩니다.
optimize_throw_if_noop
OPTIMIZE 쿼리가 머지를 수행하지 않았을 때 예외를 발생시킬지 여부를 설정합니다. 기본적으로OPTIMIZE는 아무 작업도 수행하지 않았더라도 성공으로 처리됩니다. 이 설정을 사용하면 이러한 상황을 구분하고 예외 메시지에서 그 이유를 확인할 수 있습니다.
가능한 값:
- 1 — 예외 발생이 활성화됩니다.
- 0 — 예외 발생이 비활성화됩니다.
optimize_time_filter_with_preimage
함수를 변환이 필요 없는 동등한 비교식으로 변환하여 Date 및 DateTime 프레디케이트를 최적화합니다(예:toYear(col) = 2023 -> col >= '2023-01-01' AND col <= '2023-12-31')
optimize_truncate_order_by_after_group_by_keys
모든 GROUP BY 키가 ORDER BY 접두사에 포함되면 끝부분의 ORDER BY 원소를 제거합니다.optimize_uniq_to_count
하위 쿼리에 DISTINCT 또는 GROUP BY 절이 있으면 uniq 및 그 변형(uniqUpTo 제외)을 count로 재작성합니다.optimize_using_constraints
쿼리 최적화를 위해 제약 조건을 사용합니다. 기본값은false입니다.
가능한 값:
- true, false