优化发送查询效率

This commit is contained in:
Alawn
2026-06-16 14:51:19 +08:00
parent 68c7e5046c
commit cb8290a3ec
2 changed files with 59 additions and 28 deletions
+30 -16
View File
@@ -6,22 +6,36 @@
</Attributes>
<DynSentence name="QryBatLst"> <!--查询该文件批次是否处理完成-->
<Sentence>
SELECT SND_TIME OSND_TIME, TXN_CNL,DSK_NAM ODSK_NAM,ORD_DT OORD_DT,CORG_MERC_ID OCORG_MERC_ID,CORG_NO OCORG_NO,CORG_DSK_NO OCORG_DSK_NO
,AC_DT OAC_DT,SND_DT OSND_DT,SND_TM OSND_TM,BAT_STS OBAT_STS,BAT_ORN_AMT OBAT_ORN_AMT,BAT_ORN_CNT OBAT_ORN_CNT,
BAT_TYP OBAT_TYP,CORG_FIL_NAM OCORG_FIL_NAM,SND_DT,SND_TM,MERC_ID OMERC_ID,TCORG_DSK_NO,'批量代发' RMK ,GET_TIME,CORG_JRN_NO
FROM CAPBATINF
where Corg_Dsk_No in (select Corg_Dsk_No from ( SELECT A.Corg_Dsk_No
FROM CAPBATINF A,CAPDSKINF B,CAPCUSINF C
WHERE (A.BAT_STS='1' OR A.BAT_STS='3')
AND A.ORD_DT &gt; ?
AND A.CORG_NO =?
AND A.PRO_JRL = '0'
AND (SND_TIME&lt;=?)
AND (A.GET_TIME &lt;=? OR A.GET_TIME IS NULL)
AND A.DSK_NAM = B.DSK_NAM AND B.Customer_Id = C.Customer_Id
order by rank desc,nvl(a.GET_TIME,0) asc,A.SND_TIME asc )
where ROWNUM = '1' )
FOR UPDATE skip locked
SELECT SND_TIME OSND_TIME, TXN_CNL, DSK_NAM ODSK_NAM, ORD_DT OORD_DT, CORG_MERC_ID OCORG_MERC_ID, CORG_NO OCORG_NO, CORG_DSK_NO OCORG_DSK_NO,
AC_DT OAC_DT, SND_DT, SND_TM, BAT_STS OBAT_STS, BAT_ORN_AMT OBAT_ORN_AMT, BAT_ORN_CNT OBAT_ORN_CNT, BAT_TYP OBAT_TYP,
CORG_FIL_NAM OCORG_FIL_NAM, MERC_ID OMERC_ID, TCORG_DSK_NO, '批量代发' RMK, GET_TIME, CORG_JRN_NO
FROM CAPBATINF A
WHERE A.CORG_DSK_NO = (
SELECT CORG_DSK_NO
FROM (
SELECT CORG_DSK_NO, RAND_VAL
FROM (
SELECT A.CORG_DSK_NO, C.rank, A.GET_TIME, A.SND_TIME, DBMS_RANDOM.VALUE AS RAND_VAL
FROM CAPBATINF A
INNER JOIN CAPDSKINF B ON A.DSK_NAM = B.DSK_NAM
INNER JOIN CAPCUSINF C ON B.Customer_Id = C.Customer_Id
WHERE A.BAT_STS IN ('1', '3')
AND A.ORD_DT &gt; ?
AND A.CORG_NO = ?
AND A.PRO_JRL = '0'
AND A.SND_TIME &lt;=?
AND (A.GET_TIME &lt;=? OR A.GET_TIME IS NULL)
ORDER BY
C.rank DESC,
NVL(A.GET_TIME, 0) ASC,
A.SND_TIME ASC
) TOP_20
WHERE ROWNUM <= 20
ORDER BY RAND_VAL
) RANDOM_ORDER
WHERE ROWNUM = 1
)
FOR UPDATE SKIP LOCKED
</Sentence>
<Fields>TOD_DT|CORG_NO|C_SND_TIME|C_GET_TIME|</Fields>
</DynSentence>
+29 -12
View File
@@ -6,18 +6,35 @@
</Attributes>
<DynSentence name="QryBatInf">
<Sentence>
select * from CAPBATINF
where Corg_Dsk_No in (select Corg_Dsk_No from ( SELECT A.Corg_Dsk_No
FROM CAPBATINF A,CAPDSKINF B,CAPCUSINF C
WHERE A.BAT_STS = '0'
AND A.ORD_DT &gt; ?
AND A.PRO_JRL = '0'
AND (A.SND_TIME&lt;=? OR A.SND_TIME IS NULL)
AND A.CORG_NO = ?
AND A.DSK_NAM = B.DSK_NAM AND B.Customer_Id = C.Customer_Id
order by rank desc,corg_dsk_no asc)
where ROWNUM = '1' )
FOR UPDATE skip locked
SELECT *
FROM CAPBATINF A
WHERE A.CORG_DSK_NO = (
SELECT CORG_DSK_NO
FROM (
SELECT CORG_DSK_NO, RAND_VAL
FROM (
SELECT
A.CORG_DSK_NO,
C.rank,
DBMS_RANDOM.VALUE AS RAND_VAL
FROM CAPBATINF A
INNER JOIN CAPDSKINF B ON A.DSK_NAM = B.DSK_NAM
INNER JOIN CAPCUSINF C ON B.Customer_Id = C.Customer_Id
WHERE A.BAT_STS = '0'
AND A.ORD_DT &gt ?
AND A.PRO_JRL = '0'
AND (A.SND_TIME &lt= ? OR A.SND_TIME IS NULL)
AND A.CORG_NO = ?
ORDER BY
C.rank DESC,
A.CORG_DSK_NO ASC
) TOP_20
WHERE ROWNUM <= 20
ORDER BY RAND_VAL
) RANDOM_ORDER
WHERE ROWNUM = 1
)
FOR UPDATE SKIP LOCKED
</Sentence>
<Fields>TOD_DT|C_SND_TIME|CORG_NO|</Fields>
</DynSentence>