Skip to main content
이 설정은 system.settings에서 확인할 수 있으며 소스 코드로부터 자동 생성됩니다.

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 dist
  • SELECT ... FROM dist GROUP BY sharding_key[, ...]
  • SELECT ... FROM dist GROUP BY sharding_key[, ...] ORDER BY x
  • SELECT ... FROM dist GROUP BY sharding_key[, ...] LIMIT 1
  • SELECT ... FROM dist GROUP BY sharding_key[, ...] LIMIT 1 BY x
다음 유형의 쿼리는 지원되지 않습니다(이 중 일부는 나중에 지원될 수 있습니다):
  • SELECT ... GROUP BY sharding_key[, ...] WITH TOTALS
  • SELECT ... GROUP BY sharding_key[, ...] WITH ROLLUP
  • SELECT ... GROUP BY sharding_key[, ...] WITH CUBE
  • SELECT ... GROUP BY sharding_key[, ...] SETTINGS extremes=1
가능한 값:
  • 0 — 비활성화됨.
  • 1 — 활성화됨.
관련 항목:
현재는 optimize_skip_unused_shards가 필요합니다(이유는 언젠가 이 설정이 기본적으로 활성화될 수 있고, 데이터가 Distributed 테이블을 통해 삽입되어 sharding_key에 따라 분산된 경우에만 올바르게 동작하기 때문입니다).

optimize_dry_run_check_part

활성화하면 OPTIMIZE ... DRY RUNcheckDataPart를 사용해 최종적으로 병합된 파트를 검증합니다. 검증에 실패하면 예외가 발생합니다.

optimize_empty_string_comparisons

col = '' 또는 '' = col과 같은 표현식은 empty(col)로, col != '' 또는 '' != col과 같은 표현식은 notEmpty(col)로 변환합니다. 이는 colString 또는 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

일부 함수를 서브컬럼을 읽는 방식으로 변환하는 최적화를 활성화하거나 비활성화합니다. 이로써 읽어야 하는 데이터 양을 줄일 수 있습니다. 다음 함수는 변환할 수 있습니다:
  • lengthsize0 서브컬럼을 읽도록 변환합니다.
  • emptysize0 서브컬럼을 읽도록 변환합니다.
  • notEmptysize0 서브컬럼을 읽도록 변환합니다.
  • isNullnull 서브컬럼을 읽도록 변환합니다.
  • isNotNullnull 서브컬럼을 읽도록 변환합니다.
  • countnull 서브컬럼을 읽도록 변환합니다.
  • mapKeyskeys 서브컬럼을 읽도록 변환합니다.
  • mapValuesvalues 서브컬럼을 읽도록 변환합니다.
Possible values:
  • 0 — 최적화가 비활성화됩니다.
  • 1 — 최적화가 활성화됩니다.

optimize_inverse_dictionary_lookup

미리 계산된 가능한 키 값 집합을 더 빠르게 조회해 반복적인 역방향 딕셔너리 조회를 피합니다.

optimize_multiif_to_if

조건이 하나뿐인 multiIfif로 대체합니다.

optimize_normalize_count_variants

기본적으로 count()와 의미상 동일한 집계 함수를 count()로 재작성합니다.

optimize_on_insert

삽입 전에 데이터 변환을 활성화하거나 비활성화합니다. 테이블 엔진에 따라 이 블록에서 머지가 수행된 것처럼 변환이 적용됩니다. 가능한 값:
  • 0 — 비활성화됨.
  • 1 — 활성화됨.
예시 활성화 시와 비활성화 시의 차이: 쿼리:
결과:
이 설정은 Materialized view의 동작 방식에 영향을 줍니다.

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_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
마지막 수정일 2026년 7월 23일