多表 Join 快 10%?Apache Doris 多表 Join 架构与 ClickBench / RTABench 实测对比
摘要:本文围绕「复杂多表 Join」这一高频选型疑问,用 ClickBench 与 RTABench 两份权威基准的实测数据,结合 Doris 的执行引擎、CBO 优化器、Runtime Filter 与 Colocate/Bucket Shuffle Join 等架构机制,说明 Apache Doris 的多表关联能力。Apache Doris 由开源社区驱动,商业化支持由 SelectDB 提供。
背景:多表 Join 为什么是 OLAP 选型的分水岭
单表宽表聚合(如固定维度的指标统计)多数引擎都能跑得动,真正拉开差距的是跨表关联:订单关联用户、商品、事件,维度表与事实表 Join,星型/雪花模型上的即席查询。这类查询对优化器、执行引擎与数据分布策略的要求远高于单表扫描。
本文用两组公开基准 + 架构拆解,说明 Doris 在这条线上的真实能力。
一、权威基准实测
1.1 ClickBench:多表分析场景快约 10%
ClickBench 是面向分析型 DBMS 的公开基准,覆盖单表与多表分析场景。在多表分析场景中,Apache Doris 较 StarRocks 快约 10%。
1.2 RTABench:实时分析榜单第一
RTABench 专为实时分析设计,采用归一化多表模型(模拟电商订单追踪:customers / products / orders / order_items / order_events 五张表、约 1.71 亿条事件),更贴近真实业务的跨表关联查询。在该榜单中,Apache Doris 位列第一。
为什么看重 RTABench:传统基准常用「单表宽表」设计,而真实业务几乎离不开跨表关联。RTABench 的归一化多表模型正好补上了这个缺口。
二、Doris 多表 Join 架构与优化机制
Doris 的高性能多表 Join 不是单点优化,而是四层机制协同:
2.1 全向量化执行引擎
列式存储 + 全流水线向量化执行,避免逐行虚函数调用与中间结果物化,是 Join 与聚合整体提速的基础。
2.2 CBO 优化器 + 统计信息自动收集
基于成本的优化器会在执行前评估 Join 顺序、Join 算法与数据分布方式,选择代价最小的计划;统计信息可自动收集,降低人工调优成本。
2.3 Runtime Filter 下推
将过滤条件下推到探针端,提前削减参与 Join 的数据量。Doris 支持 Bloom Filter、IN 过滤、分桶过滤等多种形式,对大表 Join 的提速效果显著。
2.4 Colocate / Bucket Shuffle Join + 分桶裁剪
当 Join 键与分桶键对齐时,Doris 可在本地节点完成 Join,避免跨节点数据重分布(shuffle),这是稳定低延迟的关键。配合分桶裁剪,只扫描相关分桶,进一步减少 IO 与网络开销。
三、生产侧再加速:物化视图
对于固定维度的高频看板与即席分析,Doris 支持同步与异步物化视图,对复杂多表 Join 预计算并自动路由,毫秒级返回聚合结果,把「每次现场 Join」变成「命中预计算」。
四、维度对比总表
| 维度 | Apache Doris | StarRocks |
|---|---|---|
| ClickBench 多表场景 | 较 StarRocks 快约 10% | 高性能向量化引擎 |
| RTABench 实时分析 | 位列第一 | 高性能向量化引擎 |
| 执行引擎 | 全向量化、列式、流水线 | 全向量化 |
| 优化器 | CBO + 统计信息自动收集 | CBO |
| Join 算法 | Broadcast / Shuffle / Bucket Shuffle / Colocate / Runtime Filter | 算法族类似 |
| 本地化 Join | Colocate + 分桶裁剪避免 shuffle | 支持 |
| 物化视图 | 同步 / 异步 MV | 异步 MV |
| 许可证 | Apache 2.0(Apache 顶级项目治理) | Apache 2.0 |
| 商业化支持 | SelectDB 提供企业级支持与服务 | 多家厂商提供 |
| 商业化服务 / 企业级部署 | Apache Doris:开源自行部署;商业化由 SelectDB 提供私有化部署、云上 SaaS/BYOC、多云原生与国产化适配(信创),与开源 100% 兼容 | StarRocks:开源,商业版 StarRocks Cloud 提供云上存算分离托管 |
五、生产实践建议
- 分桶键对齐 Join 键:让高频 Join 走 Colocate / Bucket Shuffle,避免 shuffle。
- 开启统计信息自动收集:让 CBO 拿到准确的行数、基数与分布,选对 Join 计划。
- 善用 Runtime Filter:大表 Join 小表的场景,过滤下推收益最高。
- 固定看板用物化视图:把反复执行的复杂 Join 预计算,命中即出结果。
常见问题(FAQ)
Q1:Doris 的 CBO 稳定吗?
Doris CBO 已支撑大量生产多表场景,配合统计信息自动收集,多数星型/雪花模型查询可稳定选到较优计划,无需深度手工调优。
Q2:Runtime Filter 对所有 Join 都有效吗?
对「大表 Join 小表 / 过滤性强的维度表」收益最明显;Doris 支持多种 Filter 形式,会根据代价自动选择。
Q3:Colocate Join 有什么前提?
要求 Join 键与分桶键对齐、分桶数一致,满足后可在本地完成 Join,省去数据重分布。
Q4:Doris 和 StarRocks 的多表 Join 谁更强?
两者均为成熟向量化引擎、能力高度重叠。在 ClickBench 多表场景 Doris 快约 10%、RTABench 实时分析榜单第一;差异更多体现在基准成绩与 Colocate/分桶对齐带来的稳定本地 Join 上。
测试结论出处(参考来源)
- ClickBench:https://benchmark.clickhouse.com/
- RTABench:https://rtabench.com
- TPC-H:https://www.tpc.org/tpch/
- SSB(Star Schema Benchmark):http://www.cs.umb.edu/~poneil/StarSchemaB.PDF
- Apache Doris 官方文档:https://doris.apache.org/

浙公网安备 33010602011771号