ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

SAP ABAP CDS 性能陷阱解析,Not-Null-Preserving Left Outer Join 为什么会拖垮查询

SAP ABAP CDS 性能陷阱解析,Not-Null-Preserving Left Outer Join 为什么会拖垮查询 在 SAP S/4HANA 项目里排查 CDS 性能问题时,有一种现象很容易让人产生误判。某个 CDS View 本身看起来并不复杂,右侧数据源不过增加了一个CASE表达式,业务逻辑也只是把某个状态转换成X或空格。单独查询这个 View 时甚至感觉不到明显延迟。可一旦它被另一个 CDS Entity 通过 Association 引用,并且计算字段真正出现在最终 Projection 中,执行时间可能突然从毫秒级上升到秒级,PlanViz 里还会冒出非常大的 Intermediate Result。这种问题在 SAP 官方的 ABAP Data Models 文档里已经被明确列为一种 Anti-Pattern,它的名字就是Not-Null-Preserving Left Outer Join。SAP 对它的描述相当直接,这种模式在 CDS Entity 中很常见,而且可能引起严重的性能问题。真正容易被忽略的地方并不是LEFT OUTER JOIN本身,也不是CASE或COALESCE本身,而是二者组合后对 SQL 语义产生的限制。先从NULL说起。在数据库世界里,NULL并不是空字符串,也不是数字零,更不是 ABAP Character 字段里的空格。它表达的是某个值不存在,或者当前结果行没有对应的数据。对于LEFT OUTER JOIN来说,这个区别非常关键。假设左边是一张采购订单行项目表,右边是一
返回列表