本文介绍多表关联查询优化方式
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是该分布式表的分片数量),这就是查询放大,会导致很大开销
标签:JOIN,查询,右表,多表,优化,ClickHouse,分布式 From: https://www.cnblogs.com/shenjian-online/p/16814849.html