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 distSELECT ... FROM dist GROUP BY sharding_key[, ...]SELECT ... FROM dist GROUP BY sharding_key[, ...] ORDER BY xSELECT ... FROM dist GROUP BY sharding_key[, ...] LIMIT 1SELECT ... FROM dist GROUP BY sharding_key[, ...] LIMIT 1 BY x
SELECT ... GROUP BY sharding_key[, ...] WITH TOTALSSELECT ... GROUP BY sharding_key[, ...] WITH ROLLUPSELECT ... GROUP BY sharding_key[, ...] WITH CUBESELECT ... 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
通过将某些函数优化为读取子列,启用或禁用相关优化。这可以减少需要读取的数据量。 可进行此类转换的函数包括:- length 优化为读取 size0 子列。
- empty 优化为读取 size0 子列。
- notEmpty 优化为读取 size0 子列。
- isNull 优化为读取 null 子列。
- isNotNull 优化为读取 null 子列。
- count 优化为读取 null 子列。
- mapKeys 优化为读取 keys 子列。
- mapValues 优化为读取 values 子列。
- 对于
Map,has 和 notHas 优化为读取 keys 子列。 - mapContainsKeyLike 优化为读取 keys 子列。
- mapContainsValueLike 优化为读取 values 子列。
- 0 — 禁用优化。
- 1 — 启用优化。
optimize_inverse_dictionary_lookup
通过更快地查找预先计算出的可能键值集合,避免重复进行反向字典查找。optimize_multiif_to_if
将仅包含一个条件的multiIf 替换为 if。
optimize_mutations_with_partition_pruning
启用后,对于ReplicatedMergeTree 家族的表,ClickHouse 会自动识别 ALTER TABLE UPDATE/DELETE 变更以及轻量级 UPDATE/DELETE 语句的 WHERE 子句中的分区键条件,并仅处理受影响的分区,而非全部分区。
这种自动裁剪目前仅适用于复制表。对于非复制的 MergeTree 表,请使用显式的 IN PARTITION 子句将变更限制在特定分区上。
可能的值:
- 0 — 禁用。变更和轻量级更新会处理所有分区。
- 1 — 启用。变更和轻量级更新仅处理与 WHERE 条件匹配的分区。
optimize_normalize_count_variants
将语义上等价于 count() 的聚合函数重写为 count()。optimize_on_insert
启用或禁用在插入前对数据进行转换,其效果相当于已对该块执行了合并 (具体取决于表引擎) 。 可能的值:- 0 — 禁用。
- 1 — 启用。
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_read_in_reverse_order_final
允许在带FINAL 修饰符的 SELECT 查询中,从 ReplacingMergeTree 表按 sorting key 的逆序读取数据。仅在同时启用 optimize_read_in_order 时生效。
可能的值:
- 0 — 禁用带
FINAL的逆序读取。 - 1 — 启用带
FINAL的逆序读取。
optimize_respect_aliases
如果将其设置为 true,则会在 WHERE/GROUP BY/ORDER BY 中识别别名,这将有助于分区裁剪/次级索引/optimize_aggregation_in_order/optimize_read_in_order/optimize_trivial_countoptimize_sorting_by_input_stream_properties
根据输入流的排序属性优化排序optimize_substitute_columns
使用约束来替换列。默认值为false。
可选值:
- true, false
optimize_syntax_fuse_functions
启用将具有相同参数的聚合函数融合。它会将包含至少两个参数相同的 sum、count 或 avg 聚合函数的查询重写为 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