根据右表大小、可用内存、是否分布式,逐步点选,得到推荐的 join_algorithm 设置。
同样的「订单 × 商品维表」聚合查询,分别用 JOIN 和 Dictionary 实现。滑动「右表大小」改变维表行数,看耗时与内存。
| 姿势 | 原理 | 耗时模型 | 内存模型 |
|---|---|---|---|
| JOIN (hash) | 右表全装内存哈希表 | O(R) build + O(L) probe | O(R) |
| JOIN (parallel_hash) | 右表分桶并行 build | O(R/N) build + probe | O(R) |
| JOIN (grace_hash) | 分桶 + 必要时 spill 磁盘 | 慢(磁盘 IO) | 受 max_bytes_in_join 限制 |
| Dictionary | 常驻内存 KV,O(1) 查表 | O(L) probe | 常驻 (与查询无关) |
ClickHouse 的 Dictionary 提供 10+ 种 LAYOUT 适应不同业务模式。点击卡片查看适用场景与 SQL。
左表 trades(每笔交易),右表 quotes(报价)。`ASOF LEFT JOIN ... ON t.ts >= q.ts` 表示「为每笔 trade 找时间最近的、不晚于 trade 的报价」。点击「播放」看匹配过程。
| trade_ts | trade_price | matched_quote_ts | quote_bid | quote_ask |
|---|
SELECT t.ts, t.price, q.ts AS quote_ts, q.bid, q.ask FROM trades t ASOF LEFT JOIN quotes q ON t.symbol = q.symbol AND t.ts >= q.ts;