Skip to main content
这些设置可在 system.settings 中查看,且由 源文件 自动生成。

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 — 该优化已启用。