> ## 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.

# optimize_trivial_* 세션 설정

> optimize_trivial_*로 생성된 그룹의 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)에서 확인할 수 있으며, [source](https://github.com/ClickHouse/ClickHouse/blob/master/src/Core/Settings.cpp)로부터 자동으로 생성됩니다.

<div id="optimize_trivial_approximate_count_query">
  ## optimize\_trivial\_approximate\_count\_query
</div>

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

이러한 추정을 지원하는 저장소(예: EmbeddedRocksDB)의 단순 count 최적화에는 근사값을 사용합니다.

가능한 값:

* 0 — 최적화가 비활성화됩니다.
  * 1 — 최적화가 활성화됩니다.

<div id="optimize_trivial_count_query">
  ## optimize\_trivial\_count\_query
</div>

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

MergeTree의 메타데이터를 사용해 단순한 `SELECT count() FROM table` 쿼리를 최적화하는 기능을 활성화하거나 비활성화합니다. 행 수준 보안(row-level security)을 사용해야 하는 경우 이 설정을 비활성화하십시오.

가능한 값:

* 0 — 최적화가 비활성화됩니다.
  * 1 — 최적화가 활성화됩니다.

관련 항목:

* [optimize\_functions\_to\_subcolumns](/docs/ko/reference/settings/session-settings/optimize#optimize_functions_to_subcolumns)

<div id="optimize_trivial_count_with_sparsity_filter">
  ## optimize\_trivial\_count\_with\_sparsity\_filter
</div>

<ExperimentalBadge />

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.7"},{"label": "0"},{"label": "행을 기본값과 비기본값으로 정확히 구분하는 `<pred>`가 있을 때, `SELECT count() FROM t WHERE <pred>`를 `serialization.json`에 기록된 컬럼별 `num_defaults` \/ `num_rows`로 처리하기 위한 새로운(실험적) 설정입니다."}]}]} />

[optimize\_trivial\_count\_query](/docs/ko/reference/settings/session-settings/optimize-trivial#optimize_trivial_count_query) 최적화를
`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\_count\_query](/docs/ko/reference/settings/session-settings/optimize-trivial#optimize_trivial_count_query)

<div id="optimize_trivial_group_by_limit_query">
  ## optimize\_trivial\_group\_by\_limit\_query
</div>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.5"},{"label": "1"},{"label": "`SELECT key_expr FROM t GROUP BY key_expr LIMIT n` 쿼리에서 집계를 최대 `LIMIT`개의 고유 키로 제한하는 새로운 설정입니다."}]}]} />

`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 — 최적화가 활성화됩니다.

<div id="optimize_trivial_insert_select">
  ## optimize\_trivial\_insert\_select
</div>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "24.7"},{"label": "0"},{"label": "이 최적화는 많은 경우 의미가 없습니다."}]}]} />

단순한 'INSERT INTO table SELECT ... FROM TABLES' 쿼리를 최적화합니다
