最近在整理一个 SAP S/4HANA 项目里的 OData 服务实现时,我又一次碰到一个老问题。数据库访问已经通过 CDS View 和 Open SQL 做了下推,真正拖慢响应的地方却不是 SQL,而是服务实现类里对几张 ABAP 内表反复READ TABLE、LOOP AT、SORT、DELETE ADJACENT DUPLICATES。这种情况在 RAP behavior implementation、传统 SAP Gateway DPC_EXT、批量导入程序、接口中间表处理里都很常见。ABAP 内表看起来只是内存里的临时表,可一旦数据量上来,表类型、主键、次级键和读取方式选错,性能差距会非常明显。ABAP 内表是在 ABAP 工作内存里临时存放可变行数数据的动态数据对象,每一行拥有固定结构,表类型决定行类型、表类别和表键。SAP 的 ABAP cheat sheets 对内表的核心主题覆盖得很完整,包括创建、填充、读取、排序、修改、删除、分组、次级键和性能实践。SAP Help 对表键也给出明确说明,表键可以是 sorted key、hash key、empty key 或 standard key,合理指定表键可以提升访问速度,也能避免隐式 standard key 带来的意外行为。(GitHub)内