8.ClickHouse系列之查询优化(二)

本文介绍多表关联查询优化方式

1. 用IN代替JOIN

当多表查询时,查询的数据仅从一张表出时,可考虑用IN操作而不是JOIN

SELECT a.* FROM hits_v1 a WHERE a.CounterID in (SELECT CounterID FROM visits_v1);

2. 多表JOIN小表在右

右表关联时被加载到内存与左表进行对比,所以多表JOIN时右表必须是小表。

3. 注意谓词下推

ClickHouse在join查询时不会主动发起谓词下推的操作,需要每个子查询提前完成过滤操作。新版本不存在此问题,可以在查询时EXPLAIN SYNTAX

4. 分布式表使用gobal

两张分布式表上的IN和JOIN之前必须加上GLOBAL关键字,右表只会在接收查询请求的那个节点查询一次,并将其分发到其他节点上。如果不加GLOBAL关键字的话,每个节点都会单独发起一次对右表的查询,而右表又是分布式表,就导致右表一共会被查询N^2次(N是该分布式表的分片数量),这就是查询放大,会导致很大开销

欢迎关注公众号算法小生沈健的技术博客

posted @ 2022-10-21 21:33  算法小生  阅读(136)  评论(0编辑  收藏  举报