Clickhouse 合并会导致所选标记的增加吗?

Would Clickhouse merge cause increase in selected marks?

如果 clickhouse 正在执行后台合并操作(比如将 10 个部分合并为 1 个部分),这会导致所选标记上升吗?或者选择的标记仅由由于 SELECT 查询

执行的读取操作管理

一般情况下应该不会,但可能是因为分区修剪。

create table test( D date, K Int64, S String ) 
Engine=MergeTree partition by toYYYYMM(D) order by K; 

system stop merges test;

insert into test select '2022-01-01', number, '' from numbers(1000000);

insert into test select '2022-01-31', number, '' from numbers(1000000);

select name,  min_date, max_date, rows from system.parts where table = 'test' and active;
┌─name─────────┬───min_date─┬───max_date─┬────rows─┐
│ 202201_1_1_0 │ 2022-01-01 │ 2022-01-01 │ 1000000 │ two parts in a partition and min_date
│ 202201_2_2_0 │ 2022-01-31 │ 2022-01-31 │ 1000000 │ min_date & max_date are not intersecting
└──────────────┴────────────┴────────────┴─────────┘

explain estimate select count() from test where D between '2022-01-01' and '2022-01-15';
┌─database─┬─table─┬─parts─┬────rows─┬─marks─┐
│ dw       │ test  │     1 │ 1000000 │   123 │    -- 123 mark.
└──────────┴───────┴───────┴─────────┴───────┘

system start merges test;
optimize table test final;

select name,  min_date, max_date, rows from system.parts where table = 'test' and active;
┌─name─────────┬───min_date─┬───max_date─┬────rows─┐
│ 202201_1_2_1 │ 2022-01-01 │ 2022-01-31 │ 2000000 │ one part covers the whole month
└──────────────┴────────────┴────────────┴─────────┘

explain estimate select count() from test where D between '2022-01-01' and '2022-01-15';
┌─database─┬─table─┬─parts─┬────rows─┬─marks─┐
│ dw       │ test  │     1 │ 2000000 │   245 │     -- 245 mark.
└──────────┴───────┴───────┴─────────┴───────┘

在现实生活中你永远不会注意到这一点,因为它是非常综合的情况,没有对主键索引进行过滤,并且分区列不在主键索引中。

并且这并不意味着合并会使查询变慢,这意味着 Clickhouse 能够利用数据尚未合并的事实并仅读取分区中的一部分数据。