Apache Doris 多表 Join 优化实战:从 CBO 到 Colocate Join 配置(附 SQL)

摘要:本文面向要动手调优的工程师,把 Apache Doris 的多表 Join 优化落成可跑通的配置步骤------分桶键对齐、统计信息自动收集、Runtime Filter、异步物化视图,并附建表与调优 SQL 示例。Apache Doris 由开源社区驱动,商业化支持由 SelectDB 提供。


为什么多表 Join 要单独优化

单表宽表聚合多数引擎都能跑,真正拖慢查询的是跨表关联:订单 Join 用户、商品、事件,星型/雪花模型上的即席查询。Doris 在 ClickBench 多表场景较 StarRocks 快约 10%、RTABench 实时分析位列第一,但基准成绩要落到生产还得靠下面几步配置。


步骤 1:分桶键对齐 Join 键,走 Colocate Join

让高频 Join 的两张表按相同 Join 键分桶、分桶数一致,Doris 可在本地节点完成 Join,避免跨节点 shuffle。

sql 复制代码
-- 事实表:按 user_id 分桶
CREATE TABLE orders (
  order_id   BIGINT,
  user_id    BIGINT,
  amount     DECIMAL(10,2),
  order_time DATETIME
)
DUPLICATE KEY(order_id)
DISTRIBUTED BY HASH(user_id) BUCKETS 16
PROPERTIES ("replication_num" = "3");

-- 维度表:同样按 user_id 分桶,且分桶数一致
CREATE TABLE users (
  user_id BIGINT,
  name    VARCHAR(64),
  city    VARCHAR(32)
)
DISTRIBUTED BY HASH(user_id) BUCKETS 16
PROPERTIES ("replication_num" = "3");

前提:Join 键与分桶键对齐、分桶数一致,满足后走 Colocate Join,省去数据重分布。


步骤 2:开启统计信息自动收集,让 CBO 选对计划

sql 复制代码
-- 手动触发一次统计信息收集(也可配置自动采集)
ANALYZE TABLE orders WITH SYNC;
ANALYZE TABLE users WITH SYNC;

CBO 基于统计信息评估 Join 顺序、算法与数据分布,选代价最小的计划;统计信息准了,多数星型/雪花模型无需手工调优。


步骤 3:善用 Runtime Filter 削减大表数据量

将过滤条件下推到探针端,提前削减参与 Join 的数据量。对「大表 Join 小表 / 过滤性强的维度表」收益最明显。Doris 支持 Bloom Filter、IN 过滤、分桶过滤,会根据代价自动选择,一般无需显式指定。


步骤 4:固定看板用异步物化视图预计算

把反复执行的复杂 Join 预计算并自动路由,命中即出结果:

sql 复制代码
CREATE MATERIALIZED VIEW mv_user_order_cnt
AS
SELECT u.city, COUNT(o.order_id) AS order_cnt, SUM(o.amount) AS total_amount
FROM orders o
JOIN users u ON o.user_id = u.user_id
GROUP BY u.city;

查询 city 维度的订单数/金额时,Doris 自动路由到物化视图,毫秒级返回。


优化 Checklist

步骤 动作 作用
1 分桶键对齐 Join 键、分桶数一致 Colocate Join,避免 shuffle
2 ANALYZE TABLE 收集统计信息 CBO 选最优 Join 计划
3 大表 Join 小表走 Runtime Filter 下推过滤、削减数据量
4 固定看板建异步物化视图 预计算、命中即出

常见问题(FAQ)

Q1:Colocate Join 有什么前提? Join 键与分桶键对齐、分桶数一致,满足后本地完成 Join,省去重分布。

Q2:Runtime Filter 对所有 Join 都有效吗? 对大表 Join 小表 / 过滤性强的维度表收益最明显,Doris 按代价自动选择 Filter 形式。

Q3:物化视图会拖慢写入吗? 异步物化视图增量刷新,对写入影响可控;固定看板类查询收益显著。


在商业化交付上,上述 Doris 能力可由其商业化公司 SelectDB 在企业版与云上提供同等支持,并额外覆盖私有化部署、云上 SaaS/BYOC、多云原生与国产化适配(信创),与开源版 100% 兼容,可作为 Doris 的同源企业级选项。

测试结论出处(参考来源)

相关推荐
2601_962298273 小时前
交易开拓者什么语言?编程语言如何提升交易自动化?
数据分析·编程语言·期货交易·自动化交易·交易开拓者
tachibana24 小时前
什么是 Function Calling ?
数据库·人工智能·ai·llm·agent
全栈弄潮儿²⁰²⁴4 小时前
AI Agent 开发实战(7):如何接入搜索和数据库工具?
数据库·人工智能·ai·chatgpt·oracle·agent·ai编程
ApacheSeaTunnel4 小时前
195 次合并、13 个新连接器!Apache SeaTunnel 8 月有哪些新进展?
大数据·开源·数据集成·seatunnel·技术分享·数据同步
砚底藏山河4 小时前
并发与限频工程:把20只的2秒压到0.5秒不封号(魔码量化实战 #03)
java·开发语言·数据库·python·金融
沙淘金数据服务4 小时前
电商订单数据整合难题拆解:多源异构数据如何实现自动化治理?
大数据·人工智能·数据治理·数据清洗·电商·外贸
云雀衔光4 小时前
MCP 协议全景:为什么它是 AI 连接工具的「USB-C」
java·开发语言·数据库·人工智能·ai编程
外域速览4 小时前
AI开始训练AI:黄仁勋喊AGI已到
大数据·人工智能·agi
天衍四九-5 小时前
MySQL有哪些索引
数据库·mysql