Skip to main content
这些设置可在 system.settings 中找到,并由 源代码 自动生成。

optimize_aggregators_of_group_by_keys

消除 SELECT 部分中对 GROUP BY 键使用的 min/max/any/anyLast 聚合函数

optimize_append_index

使用 约束 来附加索引条件。默认值为 false 可能的值:
  • true, false

optimize_arithmetic_operations_in_aggregate_functions

将算术运算移到聚合函数之外

optimize_const_name_size

替换为标量,并对较大的常量使用哈希作为名称 (大小按名称长度估算) 。 可能的取值:
  • 正整数 - 名称的最大长度,
  • 0 — 始终,
  • 负整数 - 从不。

optimize_count_from_files

启用或禁用针对不同输入格式文件的行数统计优化。适用于表函数/引擎 file/s3/url/hdfs/azureBlobStorage 可能的值:
  • 0 — 禁用优化。
  • 1 — 启用优化。

optimize_dictget_tuple_element

tupleElement(dictGet('dict', ('a', 'b', 'c'), key), 2) 改写为 dictGet('dict', 'b', key),以避免拉取不必要的字典属性。支持按位置 (.1.2、…) 和按名称 (.b) 访问,也适用于 dictGetOrDefault,前提是默认参数为常量 Tuple 或由常量组成的 tuple(...)

optimize_distinct_in_order

如果 DISTINCT 中的某些列构成排序前缀,则启用 DISTINCT 优化。例如,MergeTree 中 sorting key 的前缀,或 ORDER BY 语句中的前缀。

optimize_distributed_group_by_sharding_key

通过避免在发起服务器上执行高开销的聚合,优化 GROUP BY sharding_key 查询 (这将降低该查询在发起服务器上的内存使用) 。 支持以下类型的查询 (以及它们的任意组合) :
  • SELECT DISTINCT [..., ]sharding_key[, ...] FROM dist
  • SELECT ... FROM dist GROUP BY sharding_key[, ...]
  • SELECT ... FROM dist GROUP BY sharding_key[, ...] ORDER BY x
  • SELECT ... FROM dist GROUP BY sharding_key[, ...] LIMIT 1
  • SELECT ... FROM dist GROUP BY sharding_key[, ...] LIMIT 1 BY x
不支持以下类型的查询 (其中部分查询后续可能会增加支持) :
  • SELECT ... GROUP BY sharding_key[, ...] WITH TOTALS
  • SELECT ... GROUP BY sharding_key[, ...] WITH ROLLUP
  • SELECT ... GROUP BY sharding_key[, ...] WITH CUBE
  • SELECT ... GROUP BY sharding_key[, ...] SETTINGS extremes=1
可能的值:
  • 0 — 禁用。
  • 1 — 启用。
另请参见:
目前它要求启用 optimize_skip_unused_shards (原因是未来某一天它可能会默认启用,而它只有在数据是通过 Distributed 表插入时才能正确工作,也就是说,数据必须按 sharding_key 分布) 。

optimize_dry_run_check_part

启用后,OPTIMIZE ... DRY RUN 会使用 checkDataPart 对生成的合并后分片进行校验。如果校验失败,则会抛出异常。

optimize_empty_string_comparisons

仅当 col 为 String 或 FixedString 类型时,才会将 col = '''' = col 之类的表达式转换为 empty(col),并将 col != '''' != col 转换为 notEmpty(col)

optimize_extract_common_expressions

允许在 WHERE、PREWHERE、ON、HAVING 和 QUALIFY 表达式中从析取项里提取公共表达式。像 (A AND B) OR (A AND C) 这样的逻辑表达式可以改写为 A AND (B OR C),这可能有助于利用:
  • 简单筛选表达式中的索引
  • CROSS 到 INNER JOIN 的优化

optimize_functions_to_subcolumns

通过将某些函数优化为读取子列,启用或禁用相关优化。这可以减少需要读取的数据量。 可进行此类转换的函数包括: Possible values:
  • 0 — 禁用优化。
  • 1 — 启用优化。

optimize_inverse_dictionary_lookup

通过更快地查找预先计算出的可能键值集合,避免重复进行反向字典查找。

optimize_multiif_to_if

将仅包含一个条件的 multiIf 替换为 if

optimize_normalize_count_variants

将语义上等价于 count() 的聚合函数重写为 count()。

optimize_on_insert

启用或禁用在插入前对数据进行转换,其效果相当于已对该块执行了合并 (具体取决于表引擎) 。 可能的值:
  • 0 — 禁用。
  • 1 — 启用。
示例 启用与禁用的区别: 查询:
结果:
请注意,此设置项会影响 materialized view 的行为。

optimize_prewhere_after_pushdown

在后续查询计划优化可能已在 MergeTree 读取步骤上方 产生额外过滤器 (例如通过 JOIN 的谓词下推、 投影重写) 后,执行第二轮 PREWHERE 提升。若已存在 PREWHERE,新的 过滤器会通过 AND 合并到其中,而不是保留为单独的过滤器步骤。

optimize_qbit_distance_function_reads

QBit 数据类型上的距离函数替换为等效函数,后者仅从存储中读取计算所需的列。

optimize_read_in_order

启用 SELECT 查询中的 ORDER BY 优化,以便从 MergeTree 表中读取数据。 可能的值:
  • 0 — ORDER BY 优化已禁用。
  • 1 — ORDER BY 优化已启用。
另请参见

optimize_respect_aliases

如果将其设置为 true,则会在 WHERE/GROUP BY/ORDER BY 中识别别名,这将有助于分区裁剪/次级索引/optimize_aggregation_in_order/optimize_read_in_order/optimize_trivial_count

optimize_sorting_by_input_stream_properties

根据输入流的排序属性优化排序

optimize_substitute_columns

使用约束来替换列。默认值为 false 可选值:
  • true, false

optimize_syntax_fuse_functions

启用将具有相同参数的聚合函数融合。它会将包含至少两个参数相同的 sumcountavg 聚合函数的查询重写为 sumCount 可能的值:
  • 0 — 不融合参数相同的函数。
  • 1 — 融合参数相同的函数。
示例 查询:
结果:

optimize_throw_if_noop

启用或禁用以下行为:如果 OPTIMIZE 查询未执行合并,则抛出异常。 默认情况下,即使 OPTIMIZE 没有执行任何操作,也会成功返回。此设置可让您区分这些情况,并在异常消息中获取原因。 可能的值:
  • 1 — 启用抛出异常。
  • 0 — 禁用抛出异常。

optimize_time_filter_with_preimage

通过将函数改写为无需转换的等效比较来优化 Date 和 日期时间 谓词 (例如 toYear(col) = 2023 -> col >= '2023-01-01' AND col <= '2023-12-31')

optimize_truncate_order_by_after_group_by_keys

当 ORDER BY 前缀已覆盖所有 GROUP BY 键时,移除 ORDER BY 末尾的多余元素。

optimize_uniq_to_count

如果子查询包含 distinct 或 GROUP BY 子句,则将 uniq 及其各种变体 (uniqUpTo 除外) 改写为 count。

optimize_using_constraints

使用约束进行查询优化。默认值为 false 可能的值:
  • true, false
最后修改于 2026年7月23日