运行VL09超时了。一直卡在MSEG的选择上。
找到2个相关的note。仔细一瞅理由感觉写得很在理。就是需要SAP自己去走主键MSEG~0.
然后看了一下代码发现用到了HINT这么变态的写法!!!!!
%_HINTS ORACLE 'INDEX("&TABLE&" "MSEG~0" "MSEG^0")'
DB6 '<IXSCAN TABLE=''MSEG'' INDEX=''MSEG~0""'' />'
这种代码维护起来难。可读性差。对于中级或者以下ABAP来说应该是狗屎不如。怎么办呢?
慢的原因是这个语句走了MSEG~S索引。
SMBLN 物料凭证编号CHAR 10
SJAHR 物料凭证年度 NUMC 4
SMBLP 物料凭证中的项目NUMC 4
______________________________ ______________________________________________________________________ ______
SELECT * FROM MSEG INTO TABLE LT_MSEG
WHERE MBLNR = MKPF-MBLNR
AND MJAHR = MKPF-MJAHR
AND SMBLN = SPACE
AND SMBLP = 0.
但是对于这个SQL来说。基本上用了75%的主键了。并且SMBLN SMBLP是初始值啊!!
傻傻的SAP note提供者。不过人家可能是觉得为了performance吧。
但是,为啥SAP的标准代码这么垃圾呢?程序RVV50L09FORMS里面SELECT了6次MSEG啊!!!
你为啥不用FORM封装一下?????让我哭会