SQL面试题更新 2026-08-05

针对 Presto 引擎,有哪些常用的 SQL 查询性能优化手段?

数据性能优化技术原理PrestoSQL

考察说明

考查对 Presto 查询优化机制的理解及实际调优经验。

回答思路

  1. 【回答框架 1】Presto 是分布式 SQL 查询引擎,优化核心在于减少数据扫描量、降低网络传输和提升并行度。首要原则是下推过滤和投影,利用分区裁剪和列式存储(如 ORC/Parquet)只读取必要列,避免 SELECT *。
  2. 【回答框架 2】合理设计 Join 策略:优先使用 Hash Join,确保小表作为构建侧,必要时通过 join_reordering 或手动调整 SQL 顺序;对于大表 Join,可考虑分桶或使用 Bucketed Table 减少 Shuffle。
  3. 【回答框架 3】优化聚合和窗口函数:使用近似聚合(approx_distinct)处理超大基数,避免全局排序,利用本地聚合减少数据倾斜;窗口函数尽量在分区内计算,避免全量排序。
  4. 【回答框架 4】关注资源与并发配置:调整 task 并发度、内存参数(如 query.max-memory)和节点数,避免数据倾斜,可通过 skew join 优化或重分区键。
  5. 【回答框架 5】利用执行计划分析:通过 EXPLAIN 查看计划,识别高成本节点,如 Exchange 和 Cross Join,针对性改写 SQL,例如将子查询改为 JOIN 或使用 WITH 语句。
  6. 【关键点 1】列裁剪和分区裁剪是首要优化手段。
  7. 【关键点 2】Hash Join 优于 Nested Loop,小表作为构建侧。
  8. 【关键点 3】近似聚合可显著降低大数据量下的计算开销。
  9. 【关键点 4】数据倾斜需通过重分区或 skew join 缓解。
  10. 【关键点 5】EXPLAIN 是定位性能瓶颈的关键工具。
  11. 【易错点 1】不要盲目增加并发度,可能加剧资源竞争。
  12. 【易错点 2】避免过度使用近似聚合,影响精度。
  13. 【易错点 3】忽略数据分布直接优化 SQL 可能无效。