我想尝试了解ClickhouseOPTIMIZE
中查询的性能。
我计划在从 a 批量插入后立即使用它删除重复项MergeTree
,因此我可以选择:
OPTIMIZE TABLE db.table DEDUPLICATE
或者
OPTIMIZE TABLE db.table FINAL DEDUPLICATE
我知道第一个状态仅在插入尚未合并的情况下对插入进行重复数据删除,而第二个状态将对整个表执行重复数据删除。但是我担心性能;从OPTIMIZE TABLE db.table FINAL DEDUPLICATE
对不同大小表的脏分析中,我可以看到随着表变大(0.1M 行为 0.1s,0.3M 行为 1s,10M 行为 12s),它会呈指数级恶化。我假设OPTIMIZE TABLE db.table DEDUPLICATE
是基于插入大小和表大小,所以应该更具性能吗?
谁能指出一些关于这些表演的文献?
此外,如果我用 替换表,这些问题会消失ReplacingMergeTree
吗?我想同样的过程会在幕后发生,所以不管怎样都无所谓。
你确定:
呼唤
定期绝对是一个坏方法(它优化了整个表) - 考虑限制受影响的行(参见PARTITION参数)或列(参见COLUMNS参数)的范围。
我会考虑使用 [only] ReplacingMergeTree -引擎,该引擎旨在在“本机”合并期间对行进行重复数据删除(对于 OPTIMIZE 的情况,不是手动的)。
查看附加信息: