optimize_trivial_approximate_count_query
- 0 — 禁用优化。
- 1 — 启用优化。
optimize_trivial_count_query
SELECT count() FROM table 的优化,该优化会使用 MergeTree 的元数据。如果需要使用行级安全,请禁用此设置。
可能的值:
- 0 — 禁用优化。
- 1 — 启用优化。
optimize_trivial_count_with_sparsity_filter
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_group_by_limit_query
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 — 启用该优化。