query_plan_aggregation_in_order
query_plan_enable_optimizations 为 1 时生效。
这是一个专家级设置,仅应由开发人员用于调试。该设置未来可能会以不向后兼容的方式更改,或被移除。
- 0 - 禁用
- 1 - 启用
query_plan_convert_any_join_to_semi_or_anti_join
query_plan_convert_join_to_in
JOIN 转换为使用 IN 的子查询。对于非 ANY JOIN (例如默认的 ALL JOIN) ,这可能会导致结果错误。
query_plan_convert_outer_join_to_inner_join
JOIN 之后的过滤器总是会过滤掉默认值,则允许将 OUTER JOIN 转换为 INNER JOIN
query_plan_direct_read_from_text_index
query_plan_display_internal_aliases
query_plan_enable_multithreading_after_window_functions
query_plan_enable_optimizations
这是一个专家级设置,仅应由开发人员用于调试。该设置未来可能会发生不向后兼容的变更,或被移除。
- 0 - 禁用查询计划层的所有优化
- 1 - 启用查询计划层的优化 (但仍可通过各自的设置禁用单项优化)
query_plan_execute_functions_after_sorting
query_plan_enable_optimizations 为 1 时生效。
这是一个专家级设置,仅应由开发人员用于调试。该设置未来可能会以不向后兼容的方式更改,或被移除。
- 0 - 禁用
- 1 - 启用
query_plan_filter_push_down
这是一个专家级设置,仅应供开发人员调试时使用。该设置未来可能会以向后不兼容的方式更改,或被移除。
- 0 - 禁用
- 1 - 启用
query_plan_join_shard_by_pk_ranges
query_plan_join_swap_table
JOIN ON 子句的 ALL join strictness。可能的值包括:
- ‘auto’:由 planner 决定使用哪个表作为 build 表。
- ‘false’:从不交换表 (右表为 build 表) 。
- ‘true’:始终交换表 (左表为 build 表) 。
query_plan_lift_up_array_join
这是一个专家级设置,仅供开发人员用于调试。该设置未来可能会以不向后兼容的方式更改,或被移除。
- 0 - 禁用
- 1 - 启用
query_plan_lift_up_union
query_plan_enable_optimizations 为 1 时生效。
这是一个专家级设置,仅供开发人员用于调试。该设置未来可能会发生不向后兼容的变更,或被移除。
- 0 - 禁用
- 1 - 启用
query_plan_max_limit_for_join_lazy_indexing
query_plan_max_limit_for_lazy_materialization
query_plan_max_limit_for_top_k_optimization
query_plan_max_optimizations_to_apply
这是一个专家级设置,仅应供开发人员用于调试。该设置未来可能会以不向后兼容的方式更改,或者被移除。
query_plan_max_set_size_for_projection_match
IN 子句集合是否相等时,投影匹配器会计算并比较其内容哈希;此设置定义了可执行该操作的最大行数。超过此值的集合会被视为不匹配,并跳过该投影。值为 0 时将完全禁用内容哈希比较:对于包含 IN 子句集合的节点,投影匹配将永远不会成功。
该设置由聚合投影匹配器使用 (以及未来任何需要比较 IN 子句集合的投影匹配器) 。计算内容哈希的复杂度相对于集合中元素数量为 O(N log N);当查询或投影中出现大量 IN 子句时,此设置可限制规划阶段的开销。
query_plan_max_step_description_length
query_plan_merge_expression_into_join
query_plan_merge_expressions
这是一个专家级设置,仅供开发人员用于调试。该设置未来可能会以向后不兼容的方式发生变化,或者被移除。
- 0 - 禁用
- 1 - 启用
query_plan_merge_filter_into_join_condition
JOIN 条件中,并将 CROSS JOIN 转换为 INNER JOIN。
query_plan_merge_filters
query_plan_min_columns_for_join_lazy_indexing
query_plan_optimize_count_from_text_index
SELECT count() ... WHERE <text search predicate>,无需具体化匹配的行。
仅在启用 query_plan_direct_read_from_text_index 时生效。
query_plan_optimize_join_order_algorithm
- ‘greedy’ - 基础贪心算法 - 速度快,但不一定能生成最佳 JOIN 顺序
- ‘dpsize’ - 实现 DPsize 算法,目前仅支持 INNER JOIN - 会考虑所有可能的 JOIN 顺序并找出最优方案,但对于包含大量表和 JOIN 谓词的查询可能较慢。
- ‘dpsub’ - 实现 DPsub 算法,同时支持 INNER JOIN 和非 INNER JOIN - 会考虑所有可能的 JOIN 顺序并找出最优方案,但对于包含大量表和 JOIN 谓词的查询可能较慢。
- ‘dphyp’ - 实现 DPhyp (通过超图分区进行动态规划) 算法,目前仅支持 INNER JOIN - 探索与
dpsize相同的搜索空间,但只枚举连通子图对,因此在稀疏 JOIN 图上生成的中间 JOIN 更少,代价是不考虑笛卡尔积 可以将多个算法指定为逗号分隔的列表,例如dphyp,greedy。系统会按顺序尝试这些算法;如果某个算法无法处理该查询 (例如由于存在 OUTER JOIN 或不连通分量) ,则会回退到下一个算法。
query_plan_optimize_join_order_limit
query_plan_optimize_join_order_max_searched_plans
query_plan_optimize_join_order_algorithm 中的下一个算法之前,可枚举的部分计划最大数量。
该设置会以确定性的方式限制优化时间 (与实际时钟时间无关) ,适用于团状或星状等稠密 JOIN 图,因为这类场景中的搜索空间会呈指数级增长。
设置为 0 可禁用此限制。对默认的 query_plan_optimize_join_order_limit 没有影响,因为在默认情况下,搜索规模始终远低于此上限。
query_plan_optimize_join_order_randomize
query_plan_optimize_lazy_final
query_plan_optimize_lazy_materialization
query_plan_optimize_lazy_materialization_for_object_storage
ORDER BY ... LIMIT n 查询,仅对经 LIMIT 保留的 n 行读取排序和筛选不需要的列。仅当启用 query_plan_optimize_lazy_materialization 时生效。
query_plan_optimize_prewhere
query_plan_push_down_limit
这是一项专家级设置,仅供开发人员在调试时使用。该设置未来可能会以不向后兼容的方式更改,或被移除。
- 0 - 禁用
- 1 - 启用
query_plan_push_limit_by_into_sort
ORDER BY ... LIMIT BY 查询的一项查询计划级别的优化。当 LIMIT BY 的列是 ORDER BY 子句的前缀时,每个并行排序流都会在合并成一个流之前先执行 LIMIT BY,从而减少最终合并以及后续管道阶段需要处理的行数。对于 LIMIT BY 会丢弃大量行的查询,这项优化可提升速度。
仅当设置 query_plan_enable_optimizations 为 1 时,此设置才会生效。
可能的值:
- 0 - 禁用
- 1 - 启用
query_plan_read_in_order
query_plan_enable_optimizations 为 1 时生效。
这是一个专家级设置,仅供开发人员调试时使用。该设置未来可能会发生不向后兼容的变更,或被移除。
- 0 - 禁用
- 1 - 启用
query_plan_read_in_order_through_join
query_plan_read_in_order_through_spilling_join
query_plan_read_in_order_through_join 也适用于通过 max_bytes_before_external_join 或 max_bytes_ratio_before_external_join 配置了自动落盘阈值的 hash join。
此类连接只有在从不落盘时,才能保证保留左表的顺序,因为落盘会按哈希将行分散到各个桶中。因此,该优化生效时,连接会保留在内存中,且不再触发落盘阈值:右侧表将改由内存跟踪器限制,如同未配置自动落盘一样。
设置为 0 可保留保守行为,即绝不让按顺序读取穿透可能落盘的连接。依赖落盘以满足内存限制,且原本会符合该优化条件的查询,将继续按原有方式运行。
独立的通过 JOIN 执行 ORDER BY ... LIMIT 的优化会将 Sort 和 Limit 下推到连接的保留侧。它从不依赖连接保留任何顺序,因此无论此设置如何,对于支持落盘的连接都仍然可用。不过,当可以按顺序读取时,它会为按顺序读取让路——因此,启用此设置后,若支持落盘连接的保留侧能够按请求的顺序流式传输行,其上的 ORDER BY ... LIMIT 将采用按顺序读取计划,而非下推的 Sort 和 Limit。该切换仍遵循原有条件,尤其是必须将 query_plan_join_swap_table 显式设置为 false:在默认的 auto 下,后续优化可能会交换连接两侧,使按顺序读取计划失效,因此不会采用该切换,此类查询将继续使用下推的 Sort 和 Limit。
query_plan_remove_redundant_distinct
query_plan_enable_optimizations 为 1 时生效。
这是一个专家级设置,仅供开发人员用于调试。该设置今后可能会以不向后兼容的方式更改,或被移除。
- 0 - 禁用
- 1 - 启用
query_plan_remove_redundant_sorting
query_plan_enable_optimizations 为 1 时生效。
这是一个专家级设置,仅应供开发人员用于调试。该设置未来可能会以不向后兼容的方式变更,或被移除。
- 0 - 禁用
- 1 - 启用
query_plan_remove_unused_columns
这是一个专家级设置,仅应供开发人员用于调试。该设置未来可能会以向后不兼容的方式发生变化,或被移除。
- 0 - 禁用
- 1 - 启用
query_plan_reuse_storage_ordering_for_window_functions
optimize_read_in_window_order
切换一项查询计划级别的优化,在对窗口函数进行排序时复用存储排序。
仅在设置 query_plan_enable_optimizations 为 1 时生效。
这是一个专家级设置,仅应供开发人员用于调试。该设置未来可能会发生不向后兼容的变更,或被移除。
- 0 - 禁用
- 1 - 启用
query_plan_short_circuit_constant_false_join
ON 条件可折叠为常量 false 的 JOIN,将无法产生行的每个输入侧替换为空源 (INNER/CROSS/SEMI 为两侧,LEFT/RIGHT 为非保留侧) ,从而避免读取无法产生结果的一侧。适用于 analyzer (enable_analyzer = 1) 和非分布式查询计划。
query_plan_split_filter
这是一个专家级设置,仅供开发人员调试时使用。该设置未来可能会发生向后不兼容的变更,或被移除。
- 0 - 禁用
- 1 - 启用
query_plan_text_index_add_hint
query_plan_top_k_through_join
ORDER BY ... LIMIT n 下推到连接之前。该优化会限制保留侧输入在连接前需要生成的行数。
仅在设置 query_plan_enable_optimizations 为 1 时生效。
可能的值:
- 0 - 禁用
- 1 - 启用
query_plan_try_use_vector_search
query_plan_enable_optimizations 为 1 时生效。
这是一个专家级设置,仅供开发者调试使用。该设置未来可能会以不向后兼容的方式变更,或被移除。
- 0 - 禁用
- 1 - 启用