首页/数据/NoSQL 速查/OPTIMIZE 触发合并与去重
ClickHouse56 条

OPTIMIZE 触发合并与去重

OPTIMIZE TABLE 强制触发 part 合并;PARTITION 限定范围,FINAL 合并到单 part,DEDUPLICATE 按排序键或指定列去重(ReplacingMergeTree)。

NoSQL 速查数据更新于 2026-10-12
常用形式OPTIMIZE TABLE t [PARTITION p] [FINAL] [DEDUPLICATE [BY cols]]
执行方式默认异步排队,不等待完成;需要等待时设置 mutations_sync
适用时机批量导入后、对账前、需要立刻回收重复数据时

示例

示例
OPTIMIZE TABLE events PARTITION '202401' FINAL;

-- 等待合并完成(按副本等待)
OPTIMIZE TABLE events FINAL SETTINGS mutations_sync = 2;

-- 指定去重键
OPTIMIZE TABLE users DEDUPLICATE BY id, ts;
日常写入的表不需要手工 OPTIMIZE,后台合并会自动进行;频繁手工合并会与后台任务抢占资源。

易错点

  • 对大表执行 OPTIMIZE FINAL 会重写全部数据,务必在低峰执行并预留磁盘空间
  • OPTIMIZE 返回成功只代表任务已提交,不代表合并完成,需要时用 mutations_sync 或观察 system.parts

数据来源与参考

  • ClickHouse Docs: OPTIMIZE statement
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌