有时候写得不规范的SQL语句真的是占用很多时间
以下是我在工作中发现的规律,如果字段过多的使用函数,尽量不要将这些字段串联在一起做匹配或查询条件,比如红色注释部分,在执行红色部分的时候
这个SQL程序是执行了7分多钟,但是将函数分开做匹配的户查询时间不用1秒:
SELECT EBELN||'_'||LTRIM(SUBSTR(POSNR,1,6),'0')||'_'||LTRIM(SUBSTR(POSNR,7,4),'0') SO_LINE_ID,
EBELN,
SZ.MATNR,
SZ.POSNR,
WERKS
FROM SAPSR3.ZTSD_008_1@SAP_SEP SZ
WHERE
TRIM(SZ.ZTO_EC) IS NULL
AND
SZ.ZSTATE='R'
AND
TRIM(WERKS) IN('2501')
AND NOT EXISTS (SELECT NULL FROM SEINEEBS.FP_SALE_REQ_LINES_RPY@EC FS WHERE FS.SO_LINE_ID = EBELN||'_'||LTRIM(SUBSTR(POSNR,1,6),'0')||'_'||LTRIM(SUBSTR(POSNR,7,4),'0'))
AND EXISTS (SELECT NULL FROM STG.SAP_ZTSD_002 ST
WHERE TRIM(ST.EBELN_IMAGE) IS NOT NULL
AND EXISTS (SELECT NULL FROM STG.SAP_EKKO_RS EKKO,STG.SAP_EKPO_RS EKPO
WHERE EKKO.EBELN = EKPO.EBELN
--AND LTRIM(ST.EBELN,'0')||'_'||LTRIM(ST.EBELP,'0') = LTRIM(EKPO.EBELN,'0')||'_'||LTRIM(EKPO.EBELP,'0')
AND LTRIM(ST.EBELN,'0')=LTRIM(EKPO.EBELN,'0') AND LTRIM(ST.EBELP,'0')=LTRIM(EKPO.EBELP,'0')--更改部分
AND NVL(EKKO.RESWK,EKPO.WERKS) NOT IN ('2021','2022','2023'))
--AND LTRIM(ST.EBELN_IMAGE,'0')||'_'||LTRIM(ST.EBELP_IMAGE,'0') = LTRIM(SZ.EBELN,'0')||'_'||LTRIM(SZ.EBELP_STO,'0')
AND LTRIM(ST.EBELN_IMAGE,'0')= LTRIM(SZ.EBELN,'0') AND LTRIM(ST.EBELP_IMAGE,'0')=LTRIM(SZ.EBELP_STO,'0')--更改部分
)