这些设置可在 system.settings 中查看,并由 源代码 自动生成。
optimize_limit_by_function_keys
类型
Bool
默认值
1
版本历史
| 版本 | 默认值 | 注释 |
|---|---|---|
| 26.6 | 1 | 新增设置:消除 LIMIT BY 键中可由其他 LIMIT BY 键推导出的函数键。 |
消除 LIMIT BY 部分中可由其他键推导出的函数键。
示例:LIMIT 5 BY x, f(x) 会变为 LIMIT 5 BY x。
optimize_limit_by_in_order
类型
Bool
默认值
1
版本历史
| 版本 | 默认值 | 注释 |
|---|---|---|
| 26.6 | 1 | 新增设置:当 `BY` 列是表排序键的前缀时,优化 `LIMIT BY` 查询。 |
当 <cols> (顺序不限) 构成表排序键的前缀时,或者在 WHERE col = const 固定前导列后能够构成此前缀时,可优化 SELECT ... LIMIT N BY <cols> 查询。启用后,源端会按主键顺序读取数据,因此在每个流内,BY 列值相同的行会相邻到达。当数据以单个已排序流到达时,LIMIT BY 会以流式模式进行过滤,只需 O(1) 内存,而无需为已见到的每种不同 BY 列组合构建哈希表。当已排序数据通过多个流到达,且相同的 BY 值可能出现在多个流中时,系统会先以流式模式对每个流进行预过滤,将每个分组最多保留 LIMIT + OFFSET 行;然后再合并这些流,并通过最终基于哈希的 LIMIT BY 对跨多个流的分组进行去重。最后这一轮仍会为 BY 列的每种不同组合保留一个条目,但只处理预过滤后的行。