optimize_trivial_approximate_count_query
对于支持此类估算的存储 (例如 EmbeddedRocksDB) ,在简单 count 优化中使用近似值。 可能的值:- 0 — 禁用优化。
- 1 — 启用优化。
optimize_trivial_count_query
启用或禁用对简单查询SELECT count() FROM table 的优化,该优化会使用 MergeTree 的元数据。如果需要使用行级安全,请禁用此设置。
可能的值:
- 0 — 禁用优化。
- 1 — 启用优化。
optimize_trivial_count_with_sparsity_filter
将 optimize_trivial_count_query 优化扩展到 形如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
启用或禁用针对简单查询SELECT ... FROM table GROUP BY key_expr LIMIT n (不含 HAVING/ORDER BY/QUALIFY/LIMIT BY/DISTINCT/窗口子句,且不含 GROUP BY 修饰符) 的优化:将聚合的不同键数量上限设为 n + offset。
若投影中不含聚合函数,则通过设置 max_rows_to_group_by = n + offset 并配合 group_by_overflow_mode = 'any' 来施加该上限 (此方式同样适用于分布式查询中的各个分片) 。若投影中含有聚合函数,则仅当服务器在本地完成全部聚合时才会施加该上限:一旦任一聚合线程超出上限,所有线程都将被限制为共用同一个包含 n + offset 个保留键的集合,从而确保所返回键的聚合值依然精确。
以下情况下该优化不会生效:用户已显式将 group_by_overflow_mode 设为 any 以外的值 (以遵循其显式指定的 throw/break 契约) ;用户已设置了更严格的 max_rows_to_group_by;或启用了 exact_rows_before_limit (此时该上限会导致 rows_before_limit_at_least 报告的值不超过 n + offset) 。
对于同一查询,聚合函数方式与 enable_group_by_top_k_optimization 所使用的 GROUP BY top-K 堆互斥。由于堆方式更快,因此仅在堆方式不适用时才会应用该截断,即:堆优化被禁用、n + offset 超过 query_plan_max_limit_for_top_k_optimization、设置了 max_rows_to_group_by,或查询计划被序列化。
可能的值:
- 0 — 禁用优化。
- 1 — 启用优化。
optimize_trivial_insert_select
对简单的 ‘INSERT INTO table SELECT … FROM TABLES’ 查询进行优化 建议同时显式设置max_insert_threads:该优化会将 SELECT 的读取线程数限制为
max_insert_threads,进而改变 SELECT 生成的块数量。
optimize_trivial_view_pushdown_to_distributed
启用后,对于基于 Distributed 表的视图,若其SELECT 列表仅包含列引用、*
或表达式 (但不包含窗口函数或标量子查询) ,且不涉及聚合、分组、排序或联接,则完整的外层查询会被下推到
各个分片。这样,分片可在本地应用视图的过滤器和表达式,从而减少网络传输的数据量。
可能的值:
- 0 — 该优化已禁用;基于
Distributed表的视图始终在协调器上执行。 - 1 — 该优化已启用。