SQL面试题更新 2026-08-05

请说明在 Apache Doris 中,查询优化器是如何对复杂 SQL 查询进行性能提升的?

数据性能优化技术原理Apache DorisSQL

考察说明

考查对 Doris 查询优化器工作机制的理解,以及对其性能优化手段的掌握程度。

回答思路

  1. 【回答框架 1】Doris 的查询优化器主要包括基于规则的优化(RBO)和基于代价的优化(CBO)。RBO 负责对查询进行逻辑等价变换,如谓词下推、列裁剪、常量折叠、子查询重写等,减少数据处理量。这些规则不依赖于统计信息,主要改变执行计划的形状。
  2. 【回答框架 2】CBO 则利用表和列的统计信息(如行数、基数、数据分布)来估算不同执行计划的代价,并选择代价最小的计划。Doris 的 CBO 会考虑 Join 顺序、Join 算法(如 Hash Join、Nested Loop Join)、聚合下推等,通过动态规划或贪心算法搜索较优的连接顺序。
  3. 【回答框架 3】针对复杂 SQL,优化器会进行多阶段处理:先进行逻辑优化,再生成物理执行计划,并支持分区裁剪、分桶裁剪以及 Runtime Filter 的生成。Runtime Filter 可在查询执行时根据已扫描的数据动态过滤其他表的数据,显著减少 Join 过程中的数据传输和计算量。
  4. 【回答框架 4】为充分发挥优化器作用,可通过收集并更新表的统计信息、合理设计表模型和分区键、使用合适的 Join 类型和聚合方式,以及利用物化视图等手段,辅助优化器生成更高效的执行计划。
  5. 【回答框架 5】优化器效果受查询复杂度和统计信息准确性影响。对于超复杂查询,通常需要结合 SQL 改写(如拆分大查询、避免过多嵌套)来辅助优化器找到更优计划,同时可借助 EXPLAIN 工具分析执行计划并针对瓶颈进行调优。
  6. 【关键点 1】Doris 优化器通过 RBO 和 CBO 结合,分别进行逻辑重写和代价优化。
  7. 【关键点 2】CBO 依赖统计信息选择代价最低的 Join 顺序和算法。
  8. 【关键点 3】复杂查询可利用 Runtime Filter 动态过滤数据,减少处理量。
  9. 【关键点 4】合理设计表结构和定期更新统计信息能提升优化器效果。
  10. 【易错点 1】优化器并非万能,统计信息缺失或不准确可能导致劣质执行计划。
  11. 【易错点 2】Runtime Filter 效果受数据分布和过滤率影响,不保证所有场景均有明显收益。
  12. 【易错点 3】勿过度依赖优化器,复杂 SQL 仍需结合人工改写和调优。