Clickhouse 连接表

问题描述 投票:0回答:1

我有一个算法,我需要连接两个表,第一个表有 4000 万行,第二个表有 300000 行。两个表都是使用相同的 ORDER BY 创建的,因此在连接时我使用设置 join_algorithm = 'full_sorting_merge', max_bytes_before_external_sort = 0; 看起来如下:

SELECT A.* , B.*  FROM db1.table1 A  -- 40 millions of rows
left join (select * from db1.table2) B  -- 300 000 rows
on A.col1 = B.col1
SETTINGS join_algorithm = 'full_sorting_merge', max_bytes_before_external_sort = 0; 

现在我需要添加额外的表 db1.table3 来与 db1.table1 连接

SELECT A.* , B.*  FROM db1.table1 A  -- 40 millions of rows
left join (select * from db1.table2) B  -- 300 000 rows
on A.col1 = B.col1
left join (select * from db1.table3) C  -- 400 000 rows
on A.col1 = C.col1

我应该在哪里指定连接算法的设置?每次加入后?或者仅在查询结束时?如果我在查询结束时仅指定单个设置,它会在两个连接上传播吗?是否能够为查询中的每个连接指定不同的算法?请帮忙

sql performance join clickhouse
1个回答
0
投票

每个查询只能指定一个

SETTINGS
子句,因此如果查询中有多个联接,则相同的设置将传播到这两个查询。这意味着目前无法为一个查询指定不同的连接算法。

如果您想为每个联接使用不同的设置,则需要使用每个联接的设置运行单独的查询。

© www.soinside.com 2019 - 2024. All rights reserved.