SQL面试题更新 2026-08-05

在 Spark SQL 中,如果要利用 CBO(基于代价的优化器)来提升查询性能,可以采取哪些措施?请阐述 CBO 的工作原理以及实际应用中的优化策略。

数据性能优化技术原理方案权衡Spark SQL

考察说明

考查对 Spark SQL CBO 原理及实际优化手段的理解。

回答思路

  1. 【回答框架 1】CBO 即基于代价的优化器,核心是收集并维护表、列、分区、索引等统计信息,通过估算执行计划各部分代价选择最优计划,替代基于规则的优化。
  2. 【回答框架 2】首先开启 CBO:设置参数 spark.sql.cbo.enabled=true,并确保统计信息可用,可通过执行 ANALYZE TABLE 命令收集表级和列级统计信息。
  3. 【回答框架 3】利用统计信息优化 join 顺序,CBO 会根据表大小、行数、数据分布估算不同 join 类型的代价,选择 BroadcastJoin、SortMergeJoin 等最优方式。
  4. 【回答框架 4】CBO 还会优化谓词下推、列剪枝等,减少扫描和计算开销。
  5. 【回答框架 5】实际优化中需结合场景,持续监控执行计划,必要时手动调整参数如 spark.sql.autoBroadcastJoinThreshold 等,并定期更新统计信息。
  6. 【关键点 1】开启 CBO 并收集统计信息是基础。
  7. 【关键点 2】CBO 可自动优化 join 顺序和 join 类型。
  8. 【关键点 3】统计信息需及时更新以保持准确。
  9. 【关键点 4】CBO 可与谓词下推、列剪枝结合提升性能。
  10. 【易错点 1】统计信息不准确会导致 CBO 选错计划,需定期 ANALYZE TABLE。
  11. 【易错点 2】过度依赖 CBO 可能忽略手动调优机会,应结合执行计划分析。