数据岗位面试题更新 2026-08-05

请阐述 Apache Doris 中 Join 操作的执行机制,并说明针对 Join 查询可以采取哪些性能优化手段?

数据性能优化技术原理问题排查Apache Doris

考察说明

考查对 Doris 分布式 Join 执行引擎的理解以及实际调优能力。

回答思路

  1. 【回答框架 1】Doris 的 Join 操作在分布式执行中根据数据分布情况选择不同策略。常见的有 Colocate Join、Bucket Shuffle Join、Shuffle Join、Broadcast Join 等。Colocate Join 适用于两表 bucketing 列一致且数据分布相同的情况,可直接在本地节点完成 Join,避免数据移动,性能最优;Bucket Shuffle Join 适用于右表 bucketing 列与左表 Join 列一致但分布不同的场景,可将右表数据按左表分布方式打散后本地 Join;Shuffle Join 则将两边数据都按 Join key 重新分布后进行 J
  2. 【回答框架 2】优化 Join 性能首先应检查 Join 类型是否符合预期。通过 EXPLAIN 查看执行计划,确认是否使用了 Colocate 或 Bucket Shuffle Join。若计划显示 Shuffle Join 且数据量较大,可考虑调整建表模型,使两表使用相同的分桶列和分桶数,使执行计划变为 Colocate Join。对于小表与事实表的 Join,可手动使用 Broadcast Hint 或调整会话变量 enable_broadcast_join 参数,使优化器采用 Broadcast Join,减少网络传输。
  3. 【回答框架 3】此外,还需关注 Join 字段的数据类型和排序规则是否导致数据倾斜。若某 key 数据分布不均匀,会造成单节点压力过大,需对数据进行分桶优化或在建表时使用分桶数调整。也可通过 Runtime Filter 机制在 Join 前过滤数据量,减小参与 Join 的数据集。增大 Backend 的 buffer 和并行度可提升 Join 吞吐。最后应监控查询延迟,必要时使用物化视图或对业务查询进行改写,减少 Join 大表。
  4. 【关键点 1】Colocate Join 性能最优,前提是两表分桶键与 Join 键顺序一致
  5. 【关键点 2】Broadcast Join 适用于小表复制的场景,需控制小表大小
  6. 【关键点 3】利用 EXPLAIN 分析 Join 类型,并通过建表调整使执行计划使用 Colocate 或 Buckle Shuffle
  7. 【关键点 4】Runtime Filter 可提前过滤数据,降低 Join 处理量
  8. 【关键点 5】数据倾斜是 Join 性能的主要风险,需通过分桶设计缓解
  9. 【易错点 1】不要盲目认为 Broadcast Join 一定最优,广播数据量过大反而会导致网络和内存瓶颈
  10. 【易错点 2】忽略数据倾斜会导致单节点压力过大,整体查询变慢
  11. 【易错点 3】设置分桶数时不应过少,否则并发度和扩展性受限