同一条 SQL 为什么会跑出完全不同的执行计划,理解 SAP HANA 中数据对 SQL Optimizer 的影响
在 SAP S/4HANA 项目里,经常会遇到一种很容易让开发人员困惑的性能问题。一条 SQL 在开发系统里执行只需要几十毫秒,进入测试系统后依然表现正常,可到了生产系统,同样的 SQL 突然执行几秒甚至几十秒。代码没有变化,CDS View 没有变化,WHERE 条件看上去也完全一样,可通过 SAP HANA SQL Analyzer 或 PlanViz 检查时,却发现执行计划已经变了。更有意思的是,即使 SQL 文本一个字符都没有变化,只要底层数据量、数据分布、索引、表分区方式或者 SAP HANA 版本发生变化,SQL Optimizer 都可能生成另一棵完全不同的执行计划树。SAP 官方关于 ABAP 数据模型和 SAP HANA Query Processing 的文档明确指出,SQL Optimizer 在创建执行计划时,不只是分析 SQL Statement 本身,还会受到 Data Statistics、Indices、Physical Schema Design,以及 SAP HANA Optimizer 和执行引擎实现方式的影响。同一条 SQL,在数据稀疏的测试系统与拥有数亿条记录的生产系统中,最终执行计划可能有显著差异。SAP Help Portal这里真正需要建立起来的认识,并不是某个 SQL 调优技巧,而