资讯动态

让过滤条件真正抵达大表,ABAP CDS 在 SAP HANA 上的选择性过滤与 Filter Pushdown

发布时间:2026/10/9 2:53:32 来源:尧图企业网站定制
在一个典型的 SAP S/4HANA 生产系统里,我们很容易遇到这样的数据规模。销售订单抬头表已经有几千万条记录,订单项目、凭证流、定价元素或者库存相关明细表则可能达到数亿条。业务页面真正需要的,也许只是某一个销售组织、某一个工厂、最近一个月的数据。如果过滤条件能够在 SQL 执行的早期直接作用到这些大表上,SAP HANA 的列存储引擎往往可以很快完成扫描、过滤和 Join。可一旦过滤条件停留在 CDS View Stack 的上层,没有继续下推到真正承载海量数据的底层表,数据库面对的就不再是几百、几千条候选记录,而可能是几百万甚至几千万条中间结果。这类性能问题有一个很容易误导我们的地方。从 ABAP CDS 代码表面看,WHERE明明已经写了。业务查询甚至也传入了条件。可运行时间依然是几秒、十几秒,甚至更长。问题往往并不是有没有过滤,而是过滤有没有真正走到应该过滤的地方。SAP HANA 很擅长在 Column Store 中寻找满足条件的数据,但大规模 Join 仍然需要付出代价。特别是从数千万或者数亿行的表中取出数百万行参与 Join 时,如果缺乏足够有选择性的过滤条件,中间数据量会迅速膨胀。SAP 官方的 HANA 性能资料也一直强调尽可能早地减少数据量。对于 Join 场景,SAP HANA 的 Filter Mapping 机制甚至专门用于将一个 Join Partner 上的过滤条件映射到另一个 Join Partner,以便更早缩小两侧数据集。如果某条查询每天只在后台执行一两次,而且只有少量用户使用,数秒的响应时间未必会形成严重问题。但如果同一条 CDS 查询支撑的是 SAP Fi

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑