最近用户用一个报表查看采购订单的修改记录,结果运行了30分钟还没出来,选择条件如下:
而查看其源代码,是这样写的SQL语句:用EKKO的EBELN关联CDHDR的objectid,还join EKPO,join MARA可想而知数据量有多大。此语句系统应该会先找CDHDR 中所有 objectid 与 EKKO的所有采购订单EBELN 匹配,找出的结果再排除 在修改日期在20190901 到 20190930之间的,当然还要匹配EKPO,MARA,系统是怎么个运行机制不得而知,反而这样看似高明的SQL语句,30分钟内无结果,后来强行中止,也就是不知要运行到什么时候。
我认为在开发 SAP 修改记录时,一定要根据屏幕选择条件分别写SQL语句。以上查询条件,输入了修改日期,则先要从CDHDR中找这个修改日期之内的 objectid 等,再根据此 objectid 找 EKKO 和 EKPO。
然后根据EKKO,EKPO数据过滤下CDHDR,因为当按修改日期查CDHDR时,会找到很多 objectid ,而查找EKKO,EKPO时还有另一个条件 即WERKS 工厂,所以这些 objectid 即对应EKKO中的EBE