> ## Documentation Index
> Fetch the complete documentation index at: https://clickhouse.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# query_plan_* 세션 설정

> query_plan_* 그룹에 속한 ClickHouse 세션 설정입니다.

export const SettingsInfoBlock = ({type, default_value, changeable_without_restart}) => {
  return <div className="not-prose" style={{
    display: "flex",
    flexWrap: "wrap",
    alignItems: "baseline",
    columnGap: "0.5rem",
    rowGap: "0.125rem",
    margin: "0.375rem 0",
    fontSize: "0.8125rem",
    lineHeight: "1.125rem"
  }}>
      <div style={{
    fontWeight: 600,
    opacity: 0.72
  }}>유형</div>
      <div style={{
    overflowWrap: "anywhere"
  }}>{type}</div>
      <div style={{
    fontWeight: 600,
    opacity: 0.72,
    marginInlineStart: "0.5rem"
  }}>기본값</div>
      <div style={{
    overflowWrap: "anywhere"
  }}>{default_value}</div>
      {changeable_without_restart && <div style={{
    fontWeight: 600,
    opacity: 0.72,
    marginInlineStart: "0.5rem"
  }}>
          재시작 없이 변경 가능
        </div>}
      {changeable_without_restart && <div style={{
    overflowWrap: "anywhere"
  }}>
          {changeable_without_restart}
        </div>}
    </div>;
};

export const ExperimentalBadge = () => {
  return <div className="experimentalBadge">
            <div className="experimentalIcon">
            <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
                <path strokeWidth="1.25" d="M5.5 2H10.5" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
                <path strokeWidth="1.25" d="M9.50015 2V6.19625L13.4283 12.7425C13.4738 12.8183 13.4985 12.9049 13.4996 12.9934C13.5008 13.0818 13.4785 13.169 13.435 13.246C13.3914 13.323 13.3283 13.3871 13.2519 13.4317C13.1755 13.4764 13.0886 13.4999 13.0002 13.5H3.00015C2.91164 13.5 2.8247 13.4766 2.74822 13.432C2.67174 13.3874 2.60847 13.3233 2.56487 13.2463C2.52126 13.1693 2.49889 13.082 2.50004 12.9935C2.50119 12.905 2.52582 12.8184 2.5714 12.7425L6.50015 6.19625V2" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
                <path strokeWidth="1.25" d="M4.47656 9.56754C5.30344 9.41254 6.47656 9.47942 7.99969 10.25C10.0153 11.2707 11.4216 11.0569 12.2184 10.7282" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
            </svg>
        </div>
            실험 기능입니다. <u><a href="/docs/docs/beta-and-experimental-features#experimental-features">자세히 알아보세요.</a></u>
        </div>;
};

이러한 설정은 [system.settings](/docs/ko/reference/system-tables/settings)에서 확인할 수 있으며, [소스 코드](https://github.com/ClickHouse/ClickHouse/blob/master/src/Core/Settings.cpp)를 기반으로 자동 생성됩니다.

<div id="query_plan_aggregation_in_order">
  ## query\_plan\_aggregation\_in\_order
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "22.12"},{"label": "1"},{"label": "쿼리 계획 관련 일부 리팩터링 활성화"}]}]} />

순서 기반 집계에 대한 쿼리 계획 수준 최적화를 켜거나 끕니다.
설정 [`query_plan_enable_optimizations`](/docs/ko/reference/settings/session-settings/query-plan#query_plan_enable_optimizations)의 값이 1일 때만 적용됩니다.

<Note>
  이 설정은 개발자가 디버깅 목적으로만 사용해야 하는 전문가 수준의 설정입니다. 이 설정은 향후 하위 호환되지 않는 방식으로 변경되거나 제거될 수 있습니다.
</Note>

가능한 값:

* 0 - 비활성화
* 1 - 활성화

<div id="query_plan_convert_any_join_to_semi_or_anti_join">
  ## query\_plan\_convert\_any\_join\_to\_semi\_or\_anti\_join
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.9"},{"label": "1"},{"label": "새 설정입니다."}]}]} />

JOIN 이후의 필터가 일치하지 않는 행 또는 일치하는 행에 대해 항상 false로 평가되는 경우 ANY JOIN을 SEMI 또는 ANTI JOIN으로 변환하도록 허용합니다

<div id="query_plan_convert_join_to_in">
  ## query\_plan\_convert\_join\_to\_in
</div>

<SettingsInfoBlock type="Bool" default_value="0" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.4"},{"label": "0"},{"label": "새로운 설정"}]}]} />

출력 컬럼이 왼쪽 테이블에만 속하는 경우 `JOIN`을 `IN`이 포함된 서브쿼리로 변환할 수 있도록 합니다. `ANY JOIN`이 아닌 조인(예: 기본값인 ALL JOINs)에서는 잘못된 결과가 발생할 수 있습니다.

<div id="query_plan_convert_outer_join_to_inner_join">
  ## query\_plan\_convert\_outer\_join\_to\_inner\_join
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "24.4"},{"label": "1"},{"label": "`JOIN` 이후의 필터가 항상 기본값을 걸러내는 경우 `OUTER JOIN`을 `INNER JOIN`으로 변환하도록 허용합니다"}]}]} />

`JOIN` 이후의 필터가 항상 기본값을 걸러내는 경우 `OUTER JOIN`을 `INNER JOIN`으로 변환하도록 허용합니다

<div id="query_plan_direct_read_from_text_index">
  ## query\_plan\_direct\_read\_from\_text\_index
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.2"},{"label": "1"},{"label": "텍스트 인덱스가 이제 일반 제공됩니다"}]}, {"id": "row-2","items": [{"label": "25.9"},{"label": "1"},{"label": "새 설정입니다."}]}]} />

쿼리 계획에서 역텍스트 인덱스만 사용해 전문 검색 필터링을 수행하도록 허용합니다.

<div id="query_plan_display_internal_aliases">
  ## query\_plan\_display\_internal\_aliases
</div>

<SettingsInfoBlock type="Bool" default_value="0" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.9"},{"label": "0"},{"label": "새로운 설정"}]}]} />

원본 쿼리에서 지정한 별칭 대신 EXPLAIN PLAN에 내부 별칭(예: \_\_table1)을 표시합니다.

<div id="query_plan_enable_multithreading_after_window_functions">
  ## query\_plan\_enable\_multithreading\_after\_window\_functions
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

윈도우 함수를 평가한 후 멀티스레딩을 활성화하여 스트림 처리를 병렬로 수행할 수 있도록 합니다

<div id="query_plan_enable_optimizations">
  ## query\_plan\_enable\_optimizations
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

쿼리 계획 수준에서 쿼리 최적화를 켜거나 끕니다.

<Note>
  이 설정은 개발자가 디버깅 목적으로만 사용해야 하는 전문가 수준의 설정입니다. 이 설정은 향후 하위 호환되지 않는 방식으로 변경되거나 제거될 수 있습니다.
</Note>

가능한 값:

* 0 - 쿼리 계획 수준의 모든 최적화를 비활성화합니다
* 1 - 쿼리 계획 수준의 최적화를 활성화합니다(단, 개별 최적화는 각 설정을 통해 비활성화될 수 있습니다)

<div id="query_plan_execute_functions_after_sorting">
  ## query\_plan\_execute\_functions\_after\_sorting
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

표현식 처리를 정렬 단계 뒤로 옮기는 쿼리 계획 수준의 최적화를 켜거나 끕니다.
이 설정은 [`query_plan_enable_optimizations`](/docs/ko/reference/settings/session-settings/query-plan#query_plan_enable_optimizations) 값이 1일 때만 적용됩니다.

<Note>
  이 설정은 개발자가 디버깅 용도로만 사용해야 하는 전문가 수준의 설정입니다. 이 설정은 향후 하위 호환되지 않는 방식으로 변경되거나 제거될 수 있습니다.
</Note>

가능한 값:

* 0 - 비활성화
* 1 - 활성화

<div id="query_plan_filter_push_down">
  ## query\_plan\_filter\_push\_down
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

실행 계획에서 필터를 더 아래 단계로 내리는 쿼리 계획 수준의 최적화를 켜거나 끕니다.
이 설정은 [query\_plan\_enable\_optimizations](/docs/ko/reference/settings/session-settings/query-plan#query_plan_enable_optimizations) 값이 1일 때만 적용됩니다.

<Note>
  이 설정은 개발자가 디버깅 목적으로만 사용해야 하는 전문가 수준의 설정입니다. 향후 하위 호환되지 않는 방식으로 변경되거나 제거될 수 있습니다.
</Note>

가능한 값:

* 0 - 비활성화
* 1 - 활성화

<div id="query_plan_join_shard_by_pk_ranges">
  ## query\_plan\_join\_shard\_by\_pk\_ranges
</div>

<SettingsInfoBlock type="Bool" default_value="0" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.4"},{"label": "0"},{"label": "새로운 설정"}]}]} />

두 테이블 모두에서 JOIN 키에 PRIMARY KEY의 앞부분이 포함되어 있으면 JOIN에 세그먼트 분할을 적용합니다. hash, parallel\_hash 및 full\_sorting\_merge 알고리즘에서 지원됩니다. 일반적으로 쿼리 속도를 높이지는 않지만 메모리 사용량을 줄일 수 있습니다.

<div id="query_plan_join_swap_table">
  ## query\_plan\_join\_swap\_table
</div>

<SettingsInfoBlock type="BoolAuto" default_value="auto" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "24.12"},{"label": "auto"},{"label": "새 설정입니다. 이전에는 항상 오른쪽 테이블이 선택되었습니다."}]}]} />

쿼리 계획에서 JOIN의 어느 쪽을 빌드 테이블(build table)(해시 조인에서 해시 테이블에 삽입되는 내부 테이블(inner)이라고도 함)로 사용할지 결정합니다. 이 설정은 `JOIN ON` 절에서 `ALL` JOIN 엄격성에 대해서만 지원됩니다. 가능한 값은 다음과 같습니다.

* 'auto': 플래너가 어떤 테이블을 빌드 테이블로 사용할지 결정합니다.
* 'false': 테이블을 스왑하지 않습니다(오른쪽 테이블이 빌드 테이블입니다).
* 'true': 항상 테이블을 스왑합니다(왼쪽 테이블이 빌드 테이블입니다).

<div id="query_plan_lift_up_array_join">
  ## query\_plan\_lift\_up\_array\_join
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

실행 계획에서 ARRAY JOIN을 더 상위로 이동시키는 쿼리 계획 수준의 최적화를 켜거나 끕니다.
이 설정은 [query\_plan\_enable\_optimizations](/docs/ko/reference/settings/session-settings/query-plan#query_plan_enable_optimizations) 값이 1일 때만 적용됩니다.

<Note>
  이 설정은 개발자가 디버깅 용도로만 사용해야 하는 전문가 수준의 설정입니다. 향후 하위 호환되지 않는 방식으로 변경되거나 제거될 수 있습니다.
</Note>

가능한 값:

* 0 - 비활성화
* 1 - 활성화

<div id="query_plan_lift_up_union">
  ## query\_plan\_lift\_up\_union
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

추가 최적화를 수행할 수 있도록 쿼리 계획의 더 큰 하위 트리를 union으로 이동하는 쿼리 계획 수준의 최적화를 켜거나 끕니다.
이 설정은 [`query_plan_enable_optimizations`](/docs/ko/reference/settings/session-settings/query-plan#query_plan_enable_optimizations) 값이 1일 때만 적용됩니다.

<Note>
  이 설정은 개발자가 debugging 용도로만 사용해야 하는 전문가 수준의 설정입니다. 이 설정은 향후 하위 호환되지 않는 방식으로 변경되거나 제거될 수 있습니다.
</Note>

가능한 값:

* 0 - 비활성화
* 1 - 활성화

<div id="query_plan_max_limit_for_join_lazy_indexing">
  ## query\_plan\_max\_limit\_for\_join\_lazy\_indexing
</div>

<SettingsInfoBlock type="UInt64" default_value="1000" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.6"},{"label": "1000"},{"label": "JOIN의 지연 인덱싱 최적화에 쿼리 계획을 사용할 수 있는 최대 LIMIT 값을 제어하는 새로운 설정이 추가되었습니다. 0이면 제한이 없습니다"}]}]} />

JOIN의 지연 인덱싱 최적화에 쿼리 계획을 사용할 수 있는 최대 LIMIT 값을 제어합니다. 0이면 제한이 없습니다.

<div id="query_plan_max_limit_for_lazy_materialization">
  ## query\_plan\_max\_limit\_for\_lazy\_materialization
</div>

<SettingsInfoBlock type="UInt64" default_value="10000" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.4"},{"label": "10"},{"label": "lazy materialization 최적화에 쿼리 계획을 사용할 수 있는 최대 제한값을 제어하는 새로운 설정이 추가되었습니다. 0이면 제한이 없습니다"}]}, {"id": "row-2","items": [{"label": "25.12"},{"label": "10000"},{"label": "성능 개선 후 제한값을 늘렸습니다"}]}, {"id": "row-3","items": [{"label": "25.11"},{"label": "100"},{"label": "더 최적으로 조정됨"}]}]} />

lazy materialization 최적화에 쿼리 계획을 사용할 수 있는 최대 제한값을 제어합니다. 0이면 제한이 없습니다.

<div id="query_plan_max_limit_for_top_k_optimization">
  ## query\_plan\_max\_limit\_for\_top\_k\_optimization
</div>

<SettingsInfoBlock type="UInt64" default_value="1000" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.12"},{"label": "1000"},{"label": "새 설정입니다."}]}]} />

minmax 스킵 인덱스와 동적 임계값 필터링을 사용하는 TopK 최적화의 쿼리 계획을 평가할 때 허용되는 최대 limit 값을 제어합니다. 0이면 제한이 없습니다.

<div id="query_plan_max_optimizations_to_apply">
  ## query\_plan\_max\_optimizations\_to\_apply
</div>

<SettingsInfoBlock type="UInt64" default_value="10000" />

쿼리 계획에 적용할 수 있는 최적화의 총 횟수를 제한합니다. 자세한 내용은 [query\_plan\_enable\_optimizations](/docs/ko/reference/settings/session-settings/query-plan#query_plan_enable_optimizations) 설정을 참조하십시오.
복잡한 쿼리의 최적화 시간이 과도하게 길어지는 것을 방지하는 데 유용합니다.
EXPLAIN PLAN 쿼리에서는 이 한도에 도달하면 최적화 적용을 중단하고 계획을 있는 그대로 반환합니다.
일반적인 쿼리 실행 시 실제 최적화 횟수가 이 설정값을 초과하면 예외가 발생합니다.

<Note>
  이 설정은 개발자가 디버깅할 때만 사용해야 하는 전문가 수준의 설정입니다. 이 설정은 향후 하위 호환되지 않는 방식으로 변경되거나 제거될 수 있습니다.
</Note>

<div id="query_plan_max_set_size_for_projection_match">
  ## query\_plan\_max\_set\_size\_for\_projection\_match
</div>

<SettingsInfoBlock type="UInt64" default_value="10000" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.6"},{"label": "10000"},{"label": "projection matcher(현재: aggregate projection)에서 콘텐츠 해시 기반 `IN` 절 Set의 비용을 제한하는 새로운 설정이 추가되었습니다. 한도를 초과하는 Set은 일치하지 않는 것으로 처리됩니다. 0으로 설정하면 콘텐츠 해시 비교가 완전히 비활성화됩니다(compatibility 값: `IN` Set이 있는 노드에서는 projection match가 절대 성공하지 않음)."}]}]} />

projection matcher가 두 Set이 동일한지 판단할 때 콘텐츠 해시를 계산하고 비교하는 `IN` 절 Set의 최대 행 수입니다. 이보다 큰 Set은 일치하지 않는 것으로 처리되며 projection을 건너뜁니다. 0으로 설정하면 콘텐츠 해시 비교가 완전히 비활성화됩니다. 즉, `IN` 절 Set을 포함하는 노드에서는 projection match가 절대 성공하지 않습니다.

aggregate projection matcher(및 `IN` 절 Set 비교가 필요한 향후 projection matcher)에서 사용됩니다. 콘텐츠 해시 계산은 Set 원소 수에 대해 `O(N log N)` 복잡도를 가지며, 이 설정은 쿼리나 projection에 `IN` 절이 많이 포함된 경우 계획 수립 중 발생하는 비용을 제한합니다.

<div id="query_plan_max_step_description_length">
  ## query\_plan\_max\_step\_description\_length
</div>

<SettingsInfoBlock type="UInt64" default_value="500" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.9"},{"label": "500"},{"label": "새로운 설정"}]}]} />

EXPLAIN PLAN의 단계 설명 최대 길이입니다.

<div id="query_plan_merge_expression_into_join">
  ## query\_plan\_merge\_expression\_into\_join
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.7"},{"label": "1"},{"label": "새 설정입니다. JOIN 재정렬 최적화 중 Expression 단계를 JOIN 단계에 머지하도록 허용합니다."}]}]} />

JOIN 재정렬 최적화 중 표현식을 JOIN 단계에 머지하도록 허용합니다.

<div id="query_plan_merge_expressions">
  ## query\_plan\_merge\_expressions
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

연속된 필터를 병합하는 쿼리 계획 수준 최적화를 켜거나 끕니다.
설정 [query\_plan\_enable\_optimizations](/docs/ko/reference/settings/session-settings/query-plan#query_plan_enable_optimizations) 값이 1일 때만 적용됩니다.

<Note>
  이 설정은 개발자가 debugging할 때만 사용해야 하는 전문가 수준의 설정입니다. 이 설정은 향후 이전 버전과 호환되지 않는 방식으로 변경되거나 제거될 수 있습니다.
</Note>

가능한 값:

* 0 - 비활성화
* 1 - 활성화

<div id="query_plan_merge_filter_into_join_condition">
  ## query\_plan\_merge\_filter\_into\_join\_condition
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.4"},{"label": "1"},{"label": "`JOIN` 조건에 필터를 머지하는 새로운 설정 추가"}]}]} />

필터를 `JOIN` 조건에 머지하고 `CROSS JOIN`을 `INNER`로 변환할 수 있도록 허용합니다.

<div id="query_plan_merge_filters">
  ## query\_plan\_merge\_filters
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "24.7"},{"label": "0"},{"label": "쿼리 계획에서 필터를 머지할 수 있도록 허용합니다"}]}, {"id": "row-2","items": [{"label": "24.11"},{"label": "1"},{"label": "쿼리 계획에서 필터를 머지할 수 있도록 허용합니다. 분석기와 함께 filter-push-down을 올바르게 지원하려면 이 설정이 필요합니다."}]}]} />

쿼리 계획에서 필터를 머지할 수 있도록 허용합니다.

<div id="query_plan_min_columns_for_join_lazy_indexing">
  ## query\_plan\_min\_columns\_for\_join\_lazy\_indexing
</div>

<SettingsInfoBlock type="UInt64" default_value="3" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.6"},{"label": "3"},{"label": "JOIN에서 lazy indexing 최적화를 활성화하는 데 필요한 왼쪽 입력의 payload 컬럼 최소 개수를 제어합니다"}]}]} />

JOIN에서 lazy indexing 최적화를 활성화하는 데 필요한 왼쪽 입력의 payload 컬럼 최소 개수를 제어합니다. 0으로 설정하면 최적화가 비활성화됩니다.

<div id="query_plan_optimize_join_order_algorithm">
  ## query\_plan\_optimize\_join\_order\_algorithm
</div>

<ExperimentalBadge />

<SettingsInfoBlock type="JoinOrderAlgorithm" default_value="greedy" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.12"},{"label": "greedy"},{"label": "새 실험적 설정."}]}]} />

쿼리 계획 최적화 시 시도할 조인 순서 알고리즘을 지정합니다. 사용할 수 있는 알고리즘은 다음과 같습니다.

* 'greedy' - 기본 탐욕 알고리즘으로, 빠르게 동작하지만 최적의 조인 순서를 찾지 못할 수 있습니다
* 'dpsize' - 현재 Inner 조인에만 적용되는 DPsize 알고리즘을 구현합니다. 가능한 모든 조인 순서를 고려해 가장 최적의 순서를 찾지만, 테이블 수와 조인 프레디케이트가 많은 쿼리에서는 느릴 수 있습니다.
* 'dpsub' - Inner 조인과 비-Inner 조인을 모두 지원하는 DPsub 알고리즘을 구현합니다. 가능한 모든 조인 순서를 고려해 가장 최적의 순서를 찾지만, 테이블 수와 조인 프레디케이트가 많은 쿼리에서는 느릴 수 있습니다.
* 'dphyp' - 현재 Inner 조인에만 적용되는 DPhyp(Dynamic Programming via Hypergraph Partitioning) 알고리즘을 구현합니다. `dpsize`와 동일한 탐색 공간을 탐색하지만 연결된 서브그래프 쌍만 열거하므로, 교차 곱을 고려하지 않는 대신 희소 조인 그래프에서 생성되는 중간 조인이 더 적습니다
  여러 알고리즘을 쉼표로 구분된 목록으로 지정할 수 있습니다. 예: `dphyp,greedy`. 알고리즘은 지정된 순서대로 시도되며, 어떤 알고리즘이 쿼리를 처리할 수 없으면(예: Outer 조인 또는 연결되지 않은 구성 요소 때문) 다음 알고리즘을 폴백으로 사용합니다.

<div id="query_plan_optimize_join_order_limit">
  ## query\_plan\_optimize\_join\_order\_limit
</div>

<SettingsInfoBlock type="UInt64" default_value="10" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.9"},{"label": "1"},{"label": "새로운 설정"}]}, {"id": "row-2","items": [{"label": "25.12"},{"label": "10"},{"label": "기본적으로 더 많은 테이블에서 JOIN 재정렬을 허용합니다"}]}]} />

동일한 subquery 내에서 JOIN 순서를 최적화합니다. 현재는 매우 제한적인 경우에만 지원됩니다.
값은 최적화할 테이블의 최대 개수입니다.

<div id="query_plan_optimize_join_order_max_searched_plans">
  ## query\_plan\_optimize\_join\_order\_max\_searched\_plans
</div>

<ExperimentalBadge />

<SettingsInfoBlock type="UInt64" default_value="100000" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.6"},{"label": "100000"},{"label": "조인 순서 최적화기가 다음 알고리즘으로 넘어가기 전에 탐색하는 부분 계획 수를 제한하는 새로운 설정입니다."}]}]} />

조인 순서 최적화기가 `query_plan_optimize_join_order_algorithm`의 다음 알고리즘으로 전환하기 전에 탐색할 수 있는 부분 계획의 최대 개수입니다.
이 설정은 검색 공간이 지수적으로 증가하는 클리크(clique) 또는 스타(star) 같은 밀집 조인 그래프에서 최적화 시간을 결정론적으로(실제 경과 시간과 무관하게) 제한합니다.
제한을 비활성화하려면 0으로 설정하십시오. 검색이 항상 이 한도보다 훨씬 낮게 유지되는 기본 `query_plan_optimize_join_order_limit`에는 영향을 주지 않습니다.

<div id="query_plan_optimize_join_order_randomize">
  ## query\_plan\_optimize\_join\_order\_randomize
</div>

<ExperimentalBadge />

<SettingsInfoBlock type="UInt64" default_value="0" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.4"},{"label": "0"},{"label": "테스트용으로 조인 순서 통계를 무작위화하는 새로운 설정입니다."}]}]} />

0이 아닌 값이면 조인 순서 최적화기는 실제 통계 대신 무작위로 생성한 카디널리티와 NDV를 사용합니다.
1로 설정하면 랜덤 시드가 생성되며, 1보다 큰 값으로 설정하면 해당 값을 시드로 직접 사용합니다.
이 설정은 서로 다른 조인 순서로 인해 발생하는 오류를 찾기 위한 테스트 용도로 사용됩니다.

<div id="query_plan_optimize_lazy_final">
  ## query\_plan\_optimize\_lazy\_final
</div>

<SettingsInfoBlock type="Bool" default_value="0" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.4"},{"label": "0"},{"label": "집합 기반 인덱스 분석을 사용해 ReplacingMergeTree에서 FINAL 읽기를 최적화하는 새로운 설정"}]}]} />

primary key 집합을 구성하고 이를 인덱스 분석에 활용하여 ReplacingMergeTree에서 FINAL을 사용한 읽기를 최적화합니다.

<div id="query_plan_optimize_lazy_materialization">
  ## query\_plan\_optimize\_lazy\_materialization
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.4"},{"label": "1"},{"label": "지연 머티리얼라이즈 최적화에 쿼리 계획을 사용하도록 하는 새로운 설정이 추가되었습니다"}]}]} />

지연 머티리얼라이즈 최적화에 쿼리 계획을 사용합니다.

<div id="query_plan_optimize_prewhere">
  ## query\_plan\_optimize\_prewhere
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "24.2"},{"label": "1"},{"label": "지원되는 스토리지에서 필터를 PREWHERE 표현식으로 푸시다운하도록 허용합니다"}]}]} />

지원되는 스토리지에서 필터를 PREWHERE 표현식으로 푸시다운하도록 허용합니다

<div id="query_plan_push_down_limit">
  ## query\_plan\_push\_down\_limit
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

실행 계획에서 LIMIT를 더 아래 단계로 내리는 쿼리 계획 수준의 최적화를 켜거나 끕니다.
설정 [query\_plan\_enable\_optimizations](/docs/ko/reference/settings/session-settings/query-plan#query_plan_enable_optimizations)이 1인 경우에만 적용됩니다.

<Note>
  이 설정은 개발자가 디버깅할 때만 사용해야 하는 전문가 수준의 설정입니다. 이 설정은 향후 하위 호환되지 않는 방식으로 변경되거나 제거될 수 있습니다.
</Note>

가능한 값:

* 0 - 비활성화
* 1 - 활성화

<div id="query_plan_push_limit_by_into_sort">
  ## query\_plan\_push\_limit\_by\_into\_sort
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.6"},{"label": "1"},{"label": "LIMIT BY의 컬럼이 ORDER BY의 접두사인 경우, 스트림별 LIMIT BY를 정렬 파이프라인으로 푸시하여 최종 머지를 통과하는 행 수를 줄이는 새로운 설정입니다."}]}]} />

`ORDER BY ... LIMIT BY` 쿼리에 대한 쿼리 계획 수준 최적화의 활성화 여부를 제어합니다. `LIMIT BY` 컬럼이 `ORDER BY` 절의 접두사인 경우, 각 병렬 정렬 스트림은 하나로 머지되기 전에 `LIMIT BY`를 적용하므로 최종 머지와 이후 파이프라인 단계에서 처리되는 행 수가 줄어듭니다. `LIMIT BY`로 많은 비율의 행이 제외되는 쿼리의 속도를 높입니다.

이 설정은 [query\_plan\_enable\_optimizations](/docs/ko/reference/settings/session-settings/query-plan#query_plan_enable_optimizations) 설정이 1일 때만 적용됩니다.

가능한 값:

* 0 - 비활성화
* 1 - 활성화

<div id="query_plan_read_in_order">
  ## query\_plan\_read\_in\_order
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

쿼리 계획 수준에서 read in-order 최적화를 켜거나 끕니다.
설정 [`query_plan_enable_optimizations`](/docs/ko/reference/settings/session-settings/query-plan#query_plan_enable_optimizations)이 1일 때만 적용됩니다.

<Note>
  이 설정은 개발자가 디버깅 목적으로만 사용해야 하는 전문가 수준의 설정입니다. 향후 하위 호환되지 않는 방식으로 변경되거나 제거될 수 있습니다.
</Note>

가능한 값:

* 0 - 비활성화
* 1 - 활성화

<div id="query_plan_read_in_order_through_join">
  ## query\_plan\_read\_in\_order\_through\_join
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.12"},{"label": "1"},{"label": "새로운 설정"}]}]} />

JOIN 작업에서 왼쪽 테이블의 순서를 유지하며 계속 읽고, 이는 후속 단계에서 활용될 수 있습니다.

<div id="query_plan_remove_redundant_distinct">
  ## query\_plan\_remove\_redundant\_distinct
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "23.2"},{"label": "1"},{"label": "쿼리 계획에서 불필요한 Distinct 단계를 제거합니다"}]}]} />

불필요한 DISTINCT 단계를 제거하는 쿼리 계획 수준의 최적화를 활성화하거나 비활성화합니다.
설정 [`query_plan_enable_optimizations`](/docs/ko/reference/settings/session-settings/query-plan#query_plan_enable_optimizations)의 값이 1일 때만 적용됩니다.

<Note>
  이 설정은 개발자가 debugging 목적으로만 사용해야 하는 전문가 수준의 설정입니다. 이 설정은 향후 하위 호환되지 않는 방식으로 변경되거나 제거될 수 있습니다.
</Note>

가능한 값:

* 0 - 비활성화
* 1 - 활성화

<div id="query_plan_remove_redundant_sorting">
  ## query\_plan\_remove\_redundant\_sorting
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "23.1"},{"label": "1"},{"label": "쿼리 계획에서 중복된 정렬을 제거합니다. 예를 들어 서브쿼리의 ORDER BY 절과 관련된 정렬 단계입니다."}]}]} />

서브쿼리 등에서 불필요한 정렬 단계를 제거하는 쿼리 계획 수준의 최적화를 제어합니다.
이 설정은 [`query_plan_enable_optimizations`](/docs/ko/reference/settings/session-settings/query-plan#query_plan_enable_optimizations) 값이 1인 경우에만 적용됩니다.

<Note>
  이 설정은 개발자가 디버깅할 때만 사용해야 하는 전문가 수준의 설정입니다. 향후 하위 호환되지 않는 방식으로 변경되거나 제거될 수 있습니다.
</Note>

가능한 값:

* 0 - 비활성화
* 1 - 활성화

<div id="query_plan_remove_unused_columns">
  ## query\_plan\_remove\_unused\_columns
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.12"},{"label": "1"},{"label": "새 설정입니다. 쿼리 계획에서 사용되지 않는 컬럼을 제거하는 최적화가 추가되었습니다."}]}]} />

쿼리 계획 단계에서 사용되지 않는 컬럼(입력 및 출력 컬럼 모두)을 제거하려는 쿼리 계획 수준의 최적화를 켜거나 끕니다.
이 설정은 [query\_plan\_enable\_optimizations](/docs/ko/reference/settings/session-settings/query-plan#query_plan_enable_optimizations) 값이 1일 때만 적용됩니다.

<Note>
  이 설정은 개발자가 디버깅할 때만 사용해야 하는 전문가 수준의 설정입니다. 이 설정은 향후 하위 호환되지 않는 방식으로 변경되거나 제거될 수 있습니다.
</Note>

가능한 값:

* 0 - 비활성화
* 1 - 활성화

<div id="query_plan_reuse_storage_ordering_for_window_functions">
  ## query\_plan\_reuse\_storage\_ordering\_for\_window\_functions
</div>

**별칭**: `optimize_read_in_window_order`

<SettingsInfoBlock type="Bool" default_value="0" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.1"},{"label": "0"},{"label": "기본적으로 이 로직을 비활성화합니다."}]}]} />

윈도우 함수 정렬 시 스토리지 정렬을 활용하는 쿼리 계획 수준 최적화를 켜거나 끕니다.
설정 [`query_plan_enable_optimizations`](/docs/ko/reference/settings/session-settings/query-plan#query_plan_enable_optimizations)이 1인 경우에만 적용됩니다.

<Note>
  이 설정은 개발자가 디버깅 목적으로만 사용해야 하는 전문가 수준의 설정입니다. 이 설정은 향후 하위 호환되지 않는 방식으로 변경되거나 제거될 수 있습니다.
</Note>

가능한 값:

* 0 - 비활성화
* 1 - 활성화

<div id="query_plan_split_filter">
  ## query\_plan\_split\_filter
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

<Note>
  이 설정은 개발자가 디버깅 용도로만 사용해야 하는 전문가 수준의 설정입니다. 향후 하위 호환되지 않는 방식으로 변경되거나 제거될 수 있습니다.
</Note>

필터를 표현식으로 분할하는 쿼리 계획 수준의 최적화를 켜거나 끕니다.
[query\_plan\_enable\_optimizations](/docs/ko/reference/settings/session-settings/query-plan#query_plan_enable_optimizations) 설정이 1일 때만 적용됩니다.

가능한 값:

* 0 - 비활성화
* 1 - 활성화

<div id="query_plan_text_index_add_hint">
  ## query\_plan\_text\_index\_add\_hint
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.12"},{"label": "1"},{"label": "새로운 설정"}]}]} />

쿼리 계획에서 역텍스트 인덱스를 기반으로 생성된 필터링 힌트(추가 프레디케이트)를 추가할 수 있도록 합니다.

<div id="query_plan_top_k_through_join">
  ## query\_plan\_top\_k\_through\_join
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.5"},{"label": "1"},{"label": "정렬 키가 조인에서 보존되는 쪽만 참조할 때 `ORDER BY ... LIMIT n`을 LEFT/RIGHT join 아래로 푸시하는 쿼리 계획 수준 최적화를 활성화하는 새로운 설정입니다."}]}]} />

정렬 키가 조인(LEFT/RIGHT)에서 보존되는 쪽의 컬럼만 참조하는 경우, `ORDER BY ... LIMIT n`을 join 아래로 푸시하는 쿼리 계획 수준 최적화를 켜거나 끕니다. 이 최적화는 조인 전에 보존되는 쪽 입력이 생성해야 하는 행 수를 제한합니다.
이 설정은 [query\_plan\_enable\_optimizations](/docs/ko/reference/settings/session-settings/query-plan#query_plan_enable_optimizations) 값이 1일 때만 적용됩니다.

가능한 값:

* 0 - 비활성화
* 1 - 활성화

<div id="query_plan_try_use_vector_search">
  ## query\_plan\_try\_use\_vector\_search
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.1"},{"label": "1"},{"label": "새 설정입니다."}]}]} />

벡터 유사도 인덱스 사용을 시도하는 쿼리 계획 수준의 최적화를 켜거나 끕니다.
이 설정은 [`query_plan_enable_optimizations`](/docs/ko/reference/settings/session-settings/query-plan#query_plan_enable_optimizations) 설정이 1일 때만 적용됩니다.

<Note>
  이 설정은 개발자가 디버깅 목적으로만 사용해야 하는 전문가 수준의 설정입니다. 이 설정은 향후 하위 호환되지 않는 방식으로 변경되거나 제거될 수 있습니다.
</Note>

가능한 값:

* 0 - 비활성화
* 1 - 활성화
