> ## 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_* 会话设置

> ClickHouse 中 optimize_trivial_* 自动生成分组的会话设置。

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>
            Experimental 功能。 <u><a href="/docs/docs/beta-and-experimental-features#experimental-features">了解详情。</a></u>
        </div>;
};

这些设置可在 [system.settings](/docs/zh/reference/system-tables/settings) 中查看，且由 [源文件](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" />

启用或禁用对简单查询 `SELECT count() FROM table` 的优化，该优化会使用 MergeTree 的元数据。如果需要使用行级安全，请禁用此设置。

可能的值：

* 0 — 禁用优化。
  * 1 — 启用优化。

另请参阅：

* [optimize\_functions\_to\_subcolumns](/docs/zh/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>` 可将行精确划分为 `col` 的默认值与非默认值时，可利用记录在 `serialization.json` 中的每列 `num_defaults` \/ `num_rows` 为 `SELECT count() FROM t WHERE <pred>` 直接返回结果。"}]}]} />

将 [optimize\_trivial\_count\_query](/docs/zh/reference/settings/session-settings/optimize-trivial#optimize_trivial_count_query) 优化扩展到
形如 `SELECT count() FROM t WHERE col <op> const` 的
查询，其中 `<op> const`
必须能够将行精确划分为 `col` 的默认值和非默认值。这样，计数结果即可
直接根据 MergeTree 已记录在 `serialization.json` 中的每列 `num_defaults` / `num_rows`
计数器返回，无需扫描数据。

可识别的模式：

* `col = default(col)` / `col != default(col)`，适用于 `Int*` / `UInt*`、`String` /
  `FixedString`、`Date` / `DateTime` / `DateTime64`、`Decimal*`、`UUID`、`IPv4` / `IPv6`。
* `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` (真值判断) 。

相等模式不适用于 `Float*`、`Enum*`、`Nullable`、`LowCardinality`，
或复合类型 (`Tuple`、`Array`、`Map`、...) —— 对于这些类型，计数仍会走
常规扫描路径。

要使其生效，每个 part 的 `num_defaults` 计数器必须是精确的。请在插入和合并之前，
先在目标表上启用 MergeTree
表设置 `compute_exact_num_defaults_for_sparse_columns`。未启用该设置时写入的 parts
会被静默排除在此重写之外，因此仅启用 `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/zh/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` 的优化 (要求投影中没有聚合函数，且不存在 `HAVING`/`ORDER BY`/`LIMIT BY`/窗口子句，也没有 `GROUP BY` 修饰符) 。当产生 `n + offset` 个不同键后，聚合会停止。

当用户显式将 `group_by_overflow_mode` 设置为非 `any` 值时 (以保留其显式指定的 `throw`/`break` 行为) ，以及当用户已设置了更严格的 `max_rows_to_group_by` 时 (此时该优化会成为空操作) ，将不会应用此优化。

可选值：

* 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' 查询进行优化
