> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-detect-table-modification.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# enable_* 会话设置

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

export const ExperimentalBadge = () => {
  return <a href="https://clickhouse.com/docs/reference/settings/beta-and-experimental-features#experimental-features" 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 功能
        </a>;
};

export const VersionHistory = ({rows = []}) => {
  if (rows.length === 0) {
    return null;
  }
  const headers = ["版本", "默认值", "注释"];
  const border = "1px solid rgba(128, 128, 128, 0.3)";
  const cell = {
    border,
    padding: "0.25rem 0.5rem",
    textAlign: "start",
    verticalAlign: "top"
  };
  return <details className="not-prose" style={{
    border,
    borderRadius: "0.5rem",
    margin: "0.5rem 0",
    padding: "0.5rem 0.75rem",
    fontSize: "0.8125rem",
    lineHeight: "1.125rem"
  }}>
      <summary style={{
    cursor: "pointer",
    fontWeight: 600,
    opacity: 0.72
  }}>
        版本历史
      </summary>
      <table style={{
    borderCollapse: "collapse",
    width: "100%",
    margin: "0.5rem 0 0"
  }}>
        <thead>
          <tr>
            {headers.map(header => <th key={header} style={{
    ...cell,
    fontWeight: 600,
    opacity: 0.72
  }}>
                {header}
              </th>)}
          </tr>
        </thead>
        <tbody>
          {rows.map((row, row_index) => <tr key={row.id ?? row_index}>
              {(row.items ?? []).map((item, item_index) => <td key={item_index} style={{
    ...cell,
    overflowWrap: "anywhere"
  }}>
                  {item?.label}
                </td>)}
            </tr>)}
        </tbody>
      </table>
    </details>;
};

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>;
};

这些设置可在 [system.settings](/zh/reference/system-tables/settings) 中查看，并由 [源代码](https://github.com/ClickHouse/ClickHouse/blob/master/src/Core/Settings.cpp) 自动生成。

<div id="enable_adaptive_aggregator">
  ## enable\_adaptive\_aggregator
</div>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.8"},{"label": "1"},{"label": "新增设置，用于启用自适应 `GROUP BY` 聚合：每个线程的本地哈希表达到 `adaptive_aggregator_freeze_threshold` 个键后即冻结。高频键继续在较小的本地表中聚合，低频键则根据其哈希值路由到各桶的积压队列，并在桶并行合并期间仅聚合一次；因此低频键只需存储和处理一次，而非每个线程各处理一次。"}]}]} />

启用自适应 `GROUP BY` 算法：每个线程先在本地哈希表中聚合，直至达到 `adaptive_aggregator_freeze_threshold` 个键，随后该表冻结。已出现过的高频键对应的行会继续原地更新该表；新的低频键则根据其哈希值路由到各桶的积压队列，并在桶并行合并期间仅聚合一次。高频键保留在可驻留于缓存的小型表中，低频键则只需存储和处理一次，而非每个线程各处理一次。

遵循外部聚合设置 (`max_bytes_before_external_group_by`、`max_bytes_ratio_before_external_group_by`) ：超过阈值后，会将积压队列提前排空至共享表；如果仍无法降至阈值以下，则通过常规外部聚合将共享表落盘。

<div id="enable_adaptive_memory_spill_scheduler">
  ## enable\_adaptive\_memory\_spill\_scheduler
</div>

<ExperimentalBadge />

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.2"},{"label": "0"},{"label": "新设置。启用将内存数据自适应落盘到外部存储。"}]}]} />

触发处理器将数据自适应落盘到外部存储。目前仅支持 grace join。

<div id="enable_add_distinct_to_in_subqueries">
  ## enable\_add\_distinct\_to\_in\_subqueries
</div>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.8"},{"label": "0"},{"label": "用于减小分布式 IN 子查询传输的临时表大小的新设置。"}]}]} />

在 `IN` 子查询中启用 `DISTINCT`。这是一个需要权衡的设置：启用后可确保仅发送唯一值，从而大幅减小分布式 `IN` 子查询传输的临时表大小，并显著加快分片之间的数据传输。
不过，启用此设置会增加每个节点上的额外合并开销，因为必须执行去重 (`DISTINCT`) 。当网络传输成为性能瓶颈，且可以接受额外的合并成本时，请使用此设置。

<div id="enable_automatic_decision_for_merging_across_partitions_for_final">
  ## enable\_automatic\_decision\_for\_merging\_across\_partitions\_for\_final
</div>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.2"},{"label": "1"},{"label": "新设置"}]}]} />

如果启用此设置，当分区键表达式是确定性的，且分区键表达式中使用的所有列都包含在主键中时，ClickHouse 会自动启用此优化。
这种自动推导可确保具有相同主键值的行始终属于同一分区，因此可以安全地避免跨分区合并。

<div id="enable_cascades_optimizer">
  ## enable\_cascades\_optimizer
</div>

<ExperimentalBadge />

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.8"},{"label": "0"},{"label": "新增实验性设置。"}]}]} />

为分布式查询计划启用 Cascades 成本优化器。
仅当同时设置 `make_distributed_plan = 1` 时才生效：仅启用此设置不会改变单节点查询的规划方式。

<div id="enable_early_constant_folding">
  ## enable\_early\_constant\_folding
</div>

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

启用查询优化：分析函数和子查询的结果，并在其中包含常量时重写查询

<div id="enable_extended_results_for_datetime_functions">
  ## enable\_extended\_results\_for\_datetime\_functions
</div>

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

启用或禁用返回扩展范围的 `Date32` 类型结果 (相对于 `Date` 类型) ，
或返回扩展范围的 `DateTime64` 类型结果 (相对于 `DateTime` 类型) 。

可能的值：

* `0` — 对于所有类型的参数，函数均返回 `Date` 或 `DateTime`。
* `1` — 对于 `Date32` 或 `DateTime64` 参数，函数返回 `Date32` 或 `DateTime64`；否则返回 `Date` 或 `DateTime`。

下表展示了此设置对各种日期时间函数的影响。

| 函数                        | `enable_extended_results_for_datetime_functions = 0` | `enable_extended_results_for_datetime_functions = 1`                                                         |
| ------------------------- | ---------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ |
| `toStartOfYear`           | 返回 `Date` 或 `日期时间`                                   | 输入为 `Date`/`DateTime` 时，返回 `Date`/`DateTime`<br />输入为 `Date32`/`DateTime64` 时，返回 `Date32`/`DateTime64`       |
| `toStartOfISOYear`        | 返回 `Date` 或 `DateTime`                               | 输入为 `Date`/`DateTime` 时，返回 `Date`/`DateTime`<br />输入为 `Date32`/`DateTime64` 时，返回 `Date32`/`DateTime64`       |
| `toStartOfQuarter`        | 返回 `Date` 或 `日期时间`                                   | 对于 `Date`/`DateTime` 类型的输入，返回 `Date`/`DateTime`<br />对于 `Date32`/`DateTime64` 类型的输入，返回 `Date32`/`DateTime64` |
| `toStartOfMonth`          | 返回 `Date` 或 `日期时间`                                   | 对于 `Date`/`DateTime` 类型的输入，返回 `Date`/`DateTime`<br />对于 `Date32`/`DateTime64` 类型的输入，返回 `Date32`/`DateTime64` |
| `toStartOfWeek`           | 返回 `Date` 或 `DateTime`                               | `Date`/`DateTime` 输入时，返回 `Date`/`DateTime`<br />`Date32`/`DateTime64` 输入时，返回 `Date32`/`DateTime64`           |
| `toLastDayOfWeek`         | 返回 `Date` 或 `DateTime`                               | 输入为 `Date`/`DateTime` 时，返回 `Date`/`DateTime`<br />输入为 `Date32`/`DateTime64` 时，返回 `Date32`/`DateTime64`       |
| `toLastDayOfMonth`        | 返回 `Date` 或 `DateTime`                               | 对于 `Date`/`DateTime` 类型的输入，返回 `Date`/`DateTime`<br />对于 `Date32`/`DateTime64` 类型的输入，返回 `Date32`/`DateTime64` |
| `toMonday`                | 返回 `Date` 或 `DateTime`                               | 对于 `Date`/`DateTime` 类型的输入，返回 `Date`/`DateTime`<br />对于 `Date32`/`DateTime64` 类型的输入，返回 `Date32`/`DateTime64` |
| `toStartOfDay`            | 返回 `DateTime`<br />*注：对于超出 1970-2149 范围的值，结果会不正确*    | `Date`/`DateTime` 输入时，返回 `DateTime`<br />`Date32`/`DateTime64` 输入时，返回 `DateTime64`                           |
| `toStartOfHour`           | 返回 `DateTime`<br />*注意：对于超出 1970-2149 范围的值，结果会不正确。*  | 输入为 `Date`/`DateTime` 时，返回 `DateTime`<br />输入为 `Date32`/`DateTime64` 时，返回 `DateTime64`                       |
| `toStartOfFifteenMinutes` | 返回 `DateTime`<br />*注意：对于超出 1970-2149 范围的值，会返回错误结果*  | 对于 `Date`/`DateTime` 输入，返回 `DateTime`<br />对于 `Date32`/`DateTime64` 输入，返回 `DateTime64`                       |
| `toStartOfTenMinutes`     | 返回 `DateTime`<br />*注意：对于超出 1970-2149 范围的值，结果会不正确*   | 对于 `Date`/`DateTime` 类型的输入，返回 `DateTime`<br />对于 `Date32`/`DateTime64` 类型的输入，返回 `DateTime64`                 |
| `toStartOfFiveMinutes`    | 返回 `日期时间`<br />*注：对于超出 1970-2149 范围的值，结果可能不正确。*      | 对于 `Date`/`DateTime` 输入，返回 `DateTime`<br />对于 `Date32`/`DateTime64` 输入，返回 `DateTime64`                       |
| `toStartOfMinute`         | 返回 `DateTime`<br />*注：对于超出 1970-2149 范围的值，结果会出错*     | 输入为 `Date`/`DateTime` 时，返回 `DateTime`<br />输入为 `Date32`/`DateTime64` 时，返回 `DateTime64`                       |
| `timeSlot`                | 返回 `DateTime`<br />*注意：对于超出 1970-2149 范围的值，结果会不正确。*  | 对于 `Date`/`DateTime` 类型的输入，返回 `DateTime`<br />对于 `Date32`/`DateTime64` 类型的输入，返回 `DateTime64`                 |

<div id="enable_full_text_index">
  ## enable\_full\_text\_index
</div>

**别名**: `allow_experimental_full_text_index`

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.2"},{"label": "1"},{"label": "文本索引现已进入 GA 阶段"}]}, {"id": "row-2","items": [{"label": "25.12"},{"label": "0"},{"label": "文本索引已调整为 Beta 阶段。"}]}]} />

如果设置为 true，则允许使用文本索引。

<div id="enable_global_with_statement">
  ## enable\_global\_with\_statement
</div>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "21.2"},{"label": "1"},{"label": "默认将 WITH 语句应用于 UNION 查询和所有子查询"}]}]} />

将 WITH 语句应用于 UNION 查询和所有子查询

<div id="enable_hdfs_pread">
  ## enable\_hdfs\_pread
</div>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.4"},{"label": "1"},{"label": "新增设置。"}]}]} />

控制是否对 HDFS 文件启用 pread。默认使用 `hdfsPread`。如果禁用，则会使用 `hdfsRead` 和 `hdfsSeek` 来读取 HDFS 文件。

<div id="enable_http_compression">
  ## enable\_http\_compression
</div>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.10"},{"label": "1"},{"label": "一般来说，启用此项会更有益"}]}]} />

启用或禁用 HTTP 请求响应中的数据压缩。

如需了解更多信息，请参阅 [HTTP 接口说明](/zh/concepts/features/interfaces/http)。

可选值：

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

<div id="enable_identifier_resolve_cache">
  ## enable\_identifier\_resolve\_cache
</div>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.6"},{"label": "1"},{"label": "用于控制查询分析器中标识符解析缓存的新设置"}]}]} />

在查询分析器中启用标识符解析缓存。该缓存会共享已解析的别名节点，以防止同一别名被多次引用时 AST 膨胀。若怀疑结果不正确，可将其设为 false 以禁用缓存。

<div id="enable_job_stack_trace">
  ## enable\_job\_stack\_trace
</div>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.6"},{"label": "0"},{"label": "此设置默认禁用，以避免性能开销。"}]}, {"id": "row-2","items": [{"label": "24.11"},{"label": "0"},{"label": "启用收集 job 调度过程中的堆栈跟踪。默认禁用，以避免性能开销。"}]}]} />

当 job 导致异常时，输出 job 创建者的堆栈跟踪。默认禁用，以避免性能开销。

<div id="enable_json_ast_dialect">
  ## enable\_json\_ast\_dialect
</div>

<ExperimentalBadge />

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.8"},{"label": "0"},{"label": "新增设置，用于启用 `dialect` 设置的 `clickhouse_json` 值；该值会将查询解释为 JSON AST（即 `parseQueryToJSON` 的输出），而非 SQL 文本。"}]}]} />

启用 `dialect` 设置的 `clickhouse_json` 值。

当 `dialect` 设置为 `clickhouse_json` 时，查询将被解释为 JSON AST
(即 `parseQueryToJSON` 的输出) ，而非 SQL 文本。`SET` 查询仍会
按普通 SQL 解析，以便切换回其他方言。

示例：

```sql theme={null}
SET enable_json_ast_dialect = 1;
SET dialect = 'clickhouse_json';

-- Subsequent queries are parsed as JSON ASTs:
{"type":"SelectWithUnionQuery", ...}
```

<div id="enable_lazy_columns_replication">
  ## enable\_lazy\_columns\_replication
</div>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.11"},{"label": "1"},{"label": "默认在 JOIN 和 ARRAY JOIN 中启用惰性列复制"}]}, {"id": "row-2","items": [{"label": "25.10"},{"label": "0"},{"label": "添加一个设置，用于在 JOIN 和 ARRAY JOIN 中启用惰性列复制"}]}]} />

启用 `JOIN`、`ARRAY JOIN` 和高阶函数 (如 `arrayMap`) 的 lambda 捕获中的惰性列复制，可避免在内存中多次不必要地复制相同的行。

<div id="enable_materialized_cte">
  ## enable\_materialized\_cte
</div>

<ExperimentalBadge />

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.3"},{"label": "0"},{"label": "新设置"}]}]} />

启用物化公共表表达式；该设置的优先级高于 enable\_global\_with\_statement

<div id="enable_memory_bound_merging_of_aggregation_results">
  ## enable\_memory\_bound\_merging\_of\_aggregation\_results
</div>

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

启用用于聚合的内存受限合并策略。

<div id="enable_multiple_prewhere_read_steps">
  ## enable\_multiple\_prewhere\_read\_steps
</div>

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

如果有多个通过 AND 组合的条件，则会将更多条件从 WHERE 移到 PREWHERE，并分多个步骤从磁盘读取数据并进行过滤

<div id="enable_named_columns_in_function_tuple">
  ## enable\_named\_columns\_in\_function\_tuple
</div>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "24.7"},{"label": "0"},{"label": "当所有名称都是唯一的，且可视为未加引号的标识符时，在函数 tuple() 中生成命名元组。"}]}, {"id": "row-2","items": [{"label": "24.10"},{"label": "0"},{"label": "因易用性改进而暂时禁用"}]}]} />

当所有名称都是唯一的，且可视为未加引号的标识符时，在函数 tuple() 中生成命名元组。

<div id="enable_order_by_all">
  ## enable\_order\_by\_all
</div>

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

启用或禁用 `ORDER BY ALL` 排序语法，参见 [ORDER BY](/zh/reference/statements/select/order-by)。

可能的值：

* 0 — 禁用 ORDER BY ALL。
* 1 — 启用 ORDER BY ALL。

**示例**

查询：

```sql theme={null}
CREATE TABLE TAB(C1 Int, C2 Int, ALL Int) ENGINE=Memory();

INSERT INTO TAB VALUES (10, 20, 30), (20, 20, 10), (30, 10, 20);

SELECT * FROM TAB ORDER BY ALL; -- returns an error that ALL is ambiguous

SELECT * FROM TAB ORDER BY ALL SETTINGS enable_order_by_all = 0;
```

结果：

```text theme={null}
┌─C1─┬─C2─┬─ALL─┐
│ 20 │ 20 │  10 │
│ 30 │ 10 │  20 │
│ 10 │ 20 │  30 │
└────┴────┴─────┘
```

<div id="enable_packed_string_keys_in_aggregation">
  ## enable\_packed\_string\_keys\_in\_aggregation
</div>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.8"},{"label": "1"},{"label": "用于切换基于 `PackedStringRef` 的哈希表的新设置，适用于单个 `String` 键的 GROUP BY。previous_value=false，因此设置 `compatibility` 为 26.8 之前的版本时，会恢复基于旧版 `StringHashTable` 的方法，包括其两级分桶机制。"}]}]} />

对于只有一个不可为 NULL 的 `String` 键的 `GROUP BY`，使用以 16 字节压缩字符串引用 (`PackedStringRef`) 为键的哈希表。长度不超过 11 字节的键以内联方式存储在压缩引用中；较长的键则引用 Arena 中的内容。
这对大多数工作负载而言更快，但对于不同键数量极少且键长度超过 11 字节 (尤其是 12..24 字节) 的 `GROUP BY`，其速度可能比旧版方法更慢；旧版哈希表会将键内联保存在单元中，而压缩方法每次探测时都需要解引用 Arena 指针。
禁用时，将使用基于旧版 `StringHashTable` 的方法 (26.8 之前的默认方法) 。

参与分布式查询的所有服务器必须使用相同的值：使用 `distributed_aggregation_memory_efficient` 时，两级桶编号取决于键的哈希值，而两种方法的键哈希不同，因此设置值不一致的服务器可能会将同一个键分到不同桶中，导致合并结果不正确。为确保一致性，发起者始终会随次级查询发送其生效值 (即使该值仅来自服务器/profile 默认值) ，从而覆盖远程服务器自身的默认值。

<div id="enable_parsing_to_custom_serialization">
  ## enable\_parsing\_to\_custom\_serialization
</div>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "24.10"},{"label": "1"},{"label": "新设置"}]}]} />

如果为 true，则可根据从表中获得的序列化提示，直接将数据解析到使用自定义序列化 (例如 Sparse) 的列中。

<div id="enable_producing_buckets_out_of_order_in_aggregation">
  ## enable\_producing\_buckets\_out\_of\_order\_in\_aggregation
</div>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.9"},{"label": "1"},{"label": "新设置"}]}]} />

允许内存高效的聚合 (参见 `distributed_aggregation_memory_efficient`) 以乱序方式生成桶。
当聚合桶的大小分布不均时，这可能会提升性能：副本在仍处理某些 id 较低的大桶时，可以先向发起节点发送 id 较高的桶。
缺点是内存使用量可能会增加。

<div id="enable_reads_from_query_cache">
  ## enable\_reads\_from\_query\_cache
</div>

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

启用后，将从[查询缓存](/zh/concepts/features/performance/caches/query-cache)中读取 `SELECT` 查询结果。

可能的值：

* 0 - 禁用
* 1 - 启用

<div id="enable_s3_requests_logging">
  ## enable\_s3\_requests\_logging
</div>

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

启用极其详细的 S3 请求日志。仅建议在调试时使用。

<div id="enable_scalar_subquery_optimization">
  ## enable\_scalar\_subquery\_optimization
</div>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "19.18"},{"label": "1"},{"label": "防止标量子查询对大型标量值进行（反）序列化，并尽可能避免同一子查询被执行多次"}]}]} />

如果将其设置为 true，则可防止标量子查询对大型标量值进行 (反) 序列化，并尽可能避免同一子查询被执行多次。

<div id="enable_scopes_for_with_statement">
  ## enable\_scopes\_for\_with\_statement
</div>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.7"},{"label": "1"},{"label": "为与旧 analyzer 向后兼容而新增的设置。"}]}, {"id": "row-2","items": [{"label": "25.6"},{"label": "1"},{"label": "为与旧 analyzer 向后兼容而新增的设置。"}]}, {"id": "row-3","items": [{"label": "25.5"},{"label": "1"},{"label": "为与旧 analyzer 向后兼容而新增的设置。"}]}, {"id": "row-4","items": [{"label": "25.4"},{"label": "1"},{"label": "为与旧 analyzer 向后兼容而新增的设置。"}]}]} />

如果禁用，父级 WITH 子句中的声明将与在当前作用域中声明时具有相同的作用域行为。

请注意，这是 analyzer 的一个兼容性设置，用于允许运行一些旧 analyzer 能够执行的无效查询。

<div id="enable_sharding_aggregator">
  ## enable\_sharding\_aggregator
</div>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.6"},{"label": "0"},{"label": "用于启用分片式 `GROUP BY` 优化的新设置。该优化通过对分组键进行哈希计算，将行分发到各个线程，使每个线程聚合一组互不重叠的键子集，无需经过 merge 阶段；对于数据分布均匀的高基数键，这种方式效率很高。"}]}]} />

启用分片式 `GROUP BY` 优化。该优化通过对分组键进行哈希计算，将行分发到各个线程，使每个线程聚合一组互不重叠的键子集，无需经过 merge 阶段。

对于数据分布均匀的高基数键，这种方式效率很高；但如果键分布严重倾斜，或查询中的不同键非常少，则效果可能不佳。

可能的值：

* 0 — 禁用分片聚合优化。
* 1 — 启用分片聚合优化。

<div id="enable_shared_storage_snapshot_in_query">
  ## enable\_shared\_storage\_snapshot\_in\_query
</div>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.6"},{"label": "0"},{"label": "用于在查询中共享存储快照的新设置"}]}, {"id": "row-2","items": [{"label": "25.12"},{"label": "1"},{"label": "默认启用在查询中共享存储快照"}]}]} />

如果启用，单个查询中的所有子查询在访问每个表时都将共享同一个 StorageSnapshot。
这样可确保整个查询中的数据视图保持一致，即使同一个表被多次访问也是如此。

对于那些需要保证数据分区片段内部一致性的查询，此设置是必需的。示例：

```sql theme={null}
SELECT
    count()
FROM events
WHERE (_part, _part_offset) IN (
    SELECT _part, _part_offset
    FROM events
    WHERE user_id = 42
)
```

如果没有此设置，外层查询和内层查询可能会基于不同的数据快照执行，从而导致结果不正确。

可能的值：

* 0 - 已禁用
* 1 - 已启用

<div id="enable_sharing_sets_for_mutations">
  ## enable\_sharing\_sets\_for\_mutations
</div>

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

允许在同一变更的不同任务之间共享为 IN 子查询构建的 Set 对象。这可以减少内存占用和 CPU 消耗

<div id="enable_streaming_queries">
  ## enable\_streaming\_queries
</div>

<ExperimentalBadge />

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.6"},{"label": "0"},{"label": "新增设置"}]}]} />

允许 `SELECT ... FROM t STREAM [CURSOR '{...}']` 持续查询。
关闭时，任何使用 `STREAM` 修饰符的表表达式都会在构建执行计划时
被拒绝。这是流式查询功能的总开关；
其他能力也可能受其各自设置的控制。

<div id="enable_time_time64_type">
  ## enable\_time\_time64\_type
</div>

**别名**: `allow_experimental_time_time64_type`

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.6"},{"label": "0"},{"label": "新设置。允许使用新的 Experimental Time 和 Time64 数据类型。"}]}, {"id": "row-2","items": [{"label": "25.12"},{"label": "1"},{"label": "默认启用 Time 和 Time64 类型。"}]}]} />

允许创建 [Time](/zh/reference/data-types/time) 和 [Time64](/zh/reference/data-types/time64) 数据类型。

<div id="enable_unaligned_array_join">
  ## enable\_unaligned\_array\_join
</div>

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

允许对多个长度不同的数组使用 ARRAY JOIN。启用此设置后，数组会被调整到与最长数组相同的长度。

<div id="enable_url_encoding">
  ## enable\_url\_encoding
</div>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.5"},{"label": "0"},{"label": "更改了现有设置的默认值"}]}]} />

允许在 [URL](/zh/reference/engines/table-engines/special/url) 引擎表中启用或禁用对 URI 中路径的编码/解码。

默认禁用。

<div id="enable_vertical_final">
  ## enable\_vertical\_final
</div>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "24.6"},{"label": "1"},{"label": "修复 bug 后，再次默认启用 vertical final"}]}, {"id": "row-2","items": [{"label": "24.1"},{"label": "1"},{"label": "默认使用 vertical final"}]}]} />

如果启用，则在 FINAL 期间会通过将行标记为已删除并在后续进行过滤来移除重复行，而不是通过合并行来实现

<div id="enable_writes_to_query_cache">
  ## enable\_writes\_to\_query\_cache
</div>

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

启用后，`SELECT` 查询的结果会存储在[查询缓存](/zh/concepts/features/performance/caches/query-cache)中。

可能的值：

* 0 - 禁用
* 1 - 启用
