Skip to main content
这些设置可在 system.settings 中查看,并根据源代码自动生成。

materialize_statistics_on_insert

启用时,INSERT 会构建并写入统计信息。禁用时,统计信息将在合并期间或通过显式执行 MATERIALIZE STATISTICS 构建并存储。仅当前大小加上正在写入的块大小不超过 materialize_statistics_on_insert_max_table_size 的表会受此设置影响。

materialize_statistics_on_insert_max_table_size

仅当表中磁盘上活跃 parts 的当前总大小 (压缩后,单位为字节) 与正在写入块的内存中未压缩大小之和不超过此值时,才会在 INSERT 时构建并存储列统计信息 (参见 materialize_statistics_on_insert) 。该规则按写入块而非 INSERT 生效:一次 INSERT 会按分区拆分为多个块,每个分区一个块 (对于流式插入,还会拆分为多个块) 。由于正在执行的 INSERT 所产生的 parts 尚未活跃,每个块都会根据已活跃 parts 的大小进行检查。因此,向空表执行一次批量加载时,即使所有 parts 的总大小超过阈值,仍可为其全部构建统计信息;该限制会从后续插入开始生效。使用未压缩块大小 (在写入 part 前无法获知压缩后的大小) 会使检查刻意保持保守,偏差最多为一个块的大小。这样既能使小型维度表的统计信息保持最新状态——这对基于成本的 join 重排序至关重要——又能避免大型事实表每次插入时的额外开销 (其统计信息会在合并期间构建) 。0 表示不限制大小。
最后修改于 2026年8月14日