如何使clickhouse数据库中的连接表更快?

8xiog9wr  于 2021-07-15  发布在  ClickHouse
关注(0)|答案(2)|浏览(660)

我有两张table
事件
身份证件
操作系统
参数
身份证件
sx公司
sy公司
此表具有id为1-1的关系。如果执行查询

select count(*)
from
(select id from event where os like 'Android%')
inner join
(select id from params where sx >= 1024)
using id

他们很慢
但如果所有数据都包含在一个表中

select count(*) from event where sx >= 1024 and os like 'Android%'

查询执行得非常快。
请告诉我如何使用加入clickhouse数据库有效?把所有的数据放在一个表中是不方便的。

tkqqtvp1

tkqqtvp11#

您可以这样重写查询:

select count(*)
from event 
where os like 'Android%' 
AND id IN (select id from params where sx >= 1024)
agyaoht7

agyaoht72#

我在连接两个巨大的分布式表时也遇到同样的问题。主要有两个问题
执行期间
限制查询所需的内存。
对我有效的方法是使用子查询按id%n分片计算查询,然后合并所有结果。

SELECT count(*)
FROM
(
    SELECT 1
    FROM event
    WHERE id%2=0 AND id IN
    (
        SELECT id
        FROM params
        WHERE id % 2 = 0 AND sx >= 1024
    )
    UNION ALL
    SELECT 2
    FROM event
    WHERE id % 2 = 1 AND id IN
    (
        SELECT id
        FROM params
        WHERE id % 2 = 1 AND sx >= 1024
    )
)

您可以更改id%n(示例中为2),直到获得所需的性能。如果对表使用分布式引擎,则需要将in替换为global in。

相关问题