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

> ClickHouse 中 query_plan_* 生成分组的会话设置。

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="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/zh/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 JOIN) ，这可能会导致结果错误。

<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": "文本索引现已 GA"}]}, {"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/zh/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/zh/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": "新增设置"}]}]} />

如果两个表的连接键都包含 PRIMARY KEY 的前缀，则对 JOIN 启用分片。支持哈希、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 表 (也称 inner，即在 hash join 中插入哈希表的一侧) 。此设置仅支持带有 `JOIN ON` 子句的 `ALL` join strictness。可能的值包括：

* 'auto'：由 planner 决定使用哪个表作为 build 表。
* 'false'：从不交换表 (右表为 build 表) 。
* 'true'：始终交换表 (左表为 build 表) 。

<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/zh/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/zh/reference/settings/session-settings/query-plan#query_plan_enable_optimizations) 为 1 时生效。

<Note>
  这是一个专家级设置，仅供开发人员用于调试。该设置未来可能会发生不向后兼容的变更，或被移除。
</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": "新增设置，用于控制可对惰性物化优化使用查询计划的最大 LIMIT 值。若为 0，则不受限制"}]}, {"id": "row-2","items": [{"label": "25.12"},{"label": "10000"},{"label": "在性能提升后增大该限制值"}]}, {"id": "row-3","items": [{"label": "25.11"},{"label": "100"},{"label": "进一步优化"}]}]} />

控制可对惰性物化优化使用查询计划的最大 LIMIT 值。若为 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/zh/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": "新增设置，用于限制投影匹配器中对 `IN` 子句集合进行内容哈希的成本（当前：聚合投影）。超过该限制的集合会被视为不匹配。值为 0 时将完全禁用内容哈希比较（兼容性取值：对于包含 `IN` 集合的节点，投影匹配永远不会成功）。"}]}]} />

在判断两个 `IN` 子句集合是否相等时，投影匹配器会计算并比较其内容哈希；此设置定义了可执行该操作的最大行数。超过此值的集合会被视为不匹配，并跳过该投影。值为 0 时将完全禁用内容哈希比较：对于包含 `IN` 子句集合的节点，投影匹配将永远不会成功。

该设置由聚合投影匹配器使用 (以及未来任何需要比较 `IN` 子句集合的投影匹配器) 。计算内容哈希的复杂度相对于集合中元素数量为 `O(N log N)`；当查询或投影中出现大量 `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/zh/reference/settings/session-settings/query-plan#query_plan_enable_optimizations) 为 1 时生效。

<Note>
  这是一个专家级设置，仅供开发人员用于调试。该设置未来可能会以向后不兼容的方式发生变化，或者被移除。
</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 JOIN`。

<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": "允许在查询计划中合并过滤器。这是正确支持 analyzer 的过滤器下推所必需的。"}]}]} />

允许在查询计划中合并过滤器。

<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 中惰性索引优化时左侧所需的最小载荷列数"}]}]} />

控制启用 JOIN 中惰性索引优化时左侧所需的最小载荷列数。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": "新的实验性设置。"}]}]} />

指定在优化查询计划时要尝试哪些 JOIN 顺序算法。可用算法如下：

* 'greedy' - 基础贪心算法 - 速度快，但不一定能生成最佳 JOIN 顺序
* 'dpsize' - 实现 DPsize 算法，目前仅支持 INNER JOIN - 会考虑所有可能的 JOIN 顺序并找出最优方案，但对于包含大量表和 JOIN 谓词的查询可能较慢。
* 'dpsub' - 实现 DPsub 算法，同时支持 INNER JOIN 和非 INNER JOIN - 会考虑所有可能的 JOIN 顺序并找出最优方案，但对于包含大量表和 JOIN 谓词的查询可能较慢。
* 'dphyp' - 实现 DPhyp (通过超图分区进行动态规划) 算法，目前仅支持 INNER JOIN - 探索与 `dpsize` 相同的搜索空间，但只枚举连通子图对，因此在稀疏 JOIN 图上生成的中间 JOIN 更少，代价是不考虑笛卡尔积
  可以将多个算法指定为逗号分隔的列表，例如 `dphyp,greedy`。系统会按顺序尝试这些算法；如果某个算法无法处理该查询 (例如由于存在 OUTER JOIN 或不连通分量) ，则会回退到下一个算法。

<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 重排序"}]}]} />

优化同一子查询中 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": "用于限制 JOIN 顺序优化器在回退到下一个算法之前可枚举的部分计划数量的新设置。"}]}]} />

JOIN 顺序优化器在放弃当前算法并回退到 `query_plan_optimize_join_order_algorithm` 中的下一个算法之前，可枚举的部分计划最大数量。
该设置会以确定性的方式限制优化时间 (与实际时钟时间无关) ，适用于团状或星状等稠密 JOIN 图，因为这类场景中的搜索空间会呈指数级增长。
设置为 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": "用于测试的新增设置，可随机化 JOIN 顺序统计信息。"}]}]} />

当该值非 0 时，JOIN 顺序优化器会使用随机生成的基数和 NDV，而不是真实的统计信息。
当设置为 1 时，会生成一个随机种子；当设置为大于 1 的值时，则直接使用该值作为种子。
此设置用于测试，以发现由不同 JOIN 顺序引起的错误。

<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 读取"}]}]} />

通过构建主键集合并将其用于索引分析，优化从 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/zh/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/zh/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" />

用于开启或关闭按顺序读取的查询计划级别优化。
仅在设置 [`query_plan_enable_optimizations`](/docs/zh/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/zh/reference/settings/session-settings/query-plan#query_plan_enable_optimizations) 为 1 时生效。

<Note>
  这是一个专家级设置，仅供开发人员用于调试。该设置今后可能会以不向后兼容的方式更改，或被移除。
</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/zh/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/zh/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/zh/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/zh/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": "新设置"}]}]} />

允许为查询计划中基于倒排文本索引构建的过滤器添加 hint (附加谓词) 。

<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 连接中。"}]}]} />

用于切换一种查询计划级别的优化：当排序键仅引用连接保留侧 (LEFT/RIGHT) 的列时，将 `ORDER BY ... LIMIT n` 下推到连接之前。该优化会限制保留侧输入在连接前需要生成的行数。
仅在设置 [query\_plan\_enable\_optimizations](/docs/zh/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/zh/reference/settings/session-settings/query-plan#query_plan_enable_optimizations) 为 1 时生效。

<Note>
  这是一个专家级设置，仅供开发者调试使用。该设置未来可能会以不向后兼容的方式变更，或被移除。
</Note>

可能的值：

* 0 - 禁用
* 1 - 启用
