|
改成 NOT EXISTS 后,语句效率提高了很多, 但为何 原先的 FILTER 导致低效,原因在哪? 得有个说法。
SQL> SELECT AR.FID RECID, '' RECBILLNO, AR.FALLAMOUNTFOR, '' FCURWRITTENOFFAMOUNTFOR, '' FNRECEIPTAMOUNT,
2 CASE WHEN (AR.FALLAMOUNTFOR < '') THEN (-'' * ABS(SUM(NVL(PML.FCURWRITTENOFFAMOUNTFOR, '')))) ELSE ABS(SUM(NVL(PML.FCURWRITTENOFFAMOUNTFOR, ''))) END FCHARGEOFFAMOUNT,
3 PML.FSRCBILLNO FCHARGEOFFBILLNO
4 FROM T_AR_RECMACTHLOGENTRY PML
5 INNER JOIN T_AR_RECMacthLog PM ON (PM.FID = PML.FID AND (PM.FISACTIVATION <> '0'))
6 INNER JOIN T_AR_RECEIVABLE AR ON AR.FID = PML.FTARGETBILLID
7 WHERE ( ( ( ( (PML.FTARGETFROMID = 'AR_receivable' AND (PML.FSOURCEFROMID <> 'AR_receivable') )
8 AND (PML.FSOURCEFROMID <> 'AR_RECEIVEBILL') ) AND (PML.FSOURCEFROMID <> 'AR_REFUNDBILL')
9 )
10 AND EXISTS (SELECT '' FROM T_AR_RECEIVABLEENTRY ARE INNER JOIN TMPBBEF6E241F2611E78CED98BE94F FLOW ON Flow.FRECID = ARE.FENTRYID WHERE ARE.FID= AR.FID))
11 AND NOT EXISTS (SELECT 'X' FROM
12 (SELECT TARME.FENTRYID FROM T_AR_MATCKENTRY TARME
13 INNER JOIN T_AR_MATCK TARM ON (TARM.FID = TARME.FID AND TARME.FMATCHTYPE = '3')) "TEMP"
14 LEFT OUTER JOIN T_AR_RECMACTHLOGENTRY TARR ON (TARR.FSRCROWID = "TEMP".FENTRYID AND TARR.FSOURCETYPE ='b9b2335770b84a3aa9b09b22767cd7e3')
15 WHERE PML.FENTRYID= TARR.FENTRYID) )
16 GROUP BY AR.FID, PML.FSRCBILLNO, AR.FALLAMOUNTFOR, AR.FWRITTENOFFSTATUS
17 /
未选定行
已用时间: 00: 00: 01.91
执行计划
----------------------------------------------------------
Plan hash value: 3620968023
------------------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
------------------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 96 | 5384 (1)| 00:00:01 |
| 1 | HASH GROUP BY | | 1 | 96 | 5384 (1)| 00:00:01 |
|* 2 | FILTER | | | | | |
| 3 | NESTED LOOPS | | 1 | 96 | 5379 (1)| 00:00:01 |
| 4 | NESTED LOOPS | | 1 | 96 | 5379 (1)| 00:00:01 |
|* 5 | HASH JOIN | | 1 | 89 | 5378 (1)| 00:00:01 |
| 6 | NESTED LOOPS | | 1 | 16 | 6 (17)| 00:00:01 |
| 7 | NESTED LOOPS | | 1 | 16 | 6 (17)| 00:00:01 |
| 8 | VIEW | VW_SQ_1 | 1 | 5 | 5 (20)| 00:00:01 |
| 9 | HASH UNIQUE | | 1 | 23 | 5 (20)| 00:00:01 |
| 10 | NESTED LOOPS | | 1 | 23 | 4 (0)| 00:00:01 |
| 11 | NESTED LOOPS | | 1 | 23 | 4 (0)| 00:00:01 |
| 12 | TABLE ACCESS FULL | TMPBBEF6E241F2611E78CED98BE94F | 1 | 13 | 3 (0)| 00:00:01 |
|* 13 | INDEX UNIQUE SCAN | PK_AR_RECEIVABLEENTRY | 1 | | 0 (0)| 00:00:01 |
| 14 | TABLE ACCESS BY INDEX ROWID| T_AR_RECEIVABLEENTRY | 1 | 10 | 1 (0)| 00:00:01 |
|* 15 | INDEX UNIQUE SCAN | PK_AR_RECEIVABLE | 1 | | 0 (0)| 00:00:01 |
| 16 | TABLE ACCESS BY INDEX ROWID | T_AR_RECEIVABLE | 1 | 11 | 1 (0)| 00:00:01 |
|* 17 | TABLE ACCESS FULL | T_AR_RECMACTHLOGENTRY | 55057 | 3924K| 5372 (1)| 00:00:01 |
|* 18 | INDEX UNIQUE SCAN | PK_AR_RECMACTHLOG | 1 | | 0 (0)| 00:00:01 |
|* 19 | TABLE ACCESS BY INDEX ROWID | T_AR_RECMACTHLOG | 1 | 7 | 1 (0)| 00:00:01 |
| 20 | NESTED LOOPS | | 1 | 60 | 4 (0)| 00:00:01 |
| 21 | NESTED LOOPS | | 1 | 55 | 4 (0)| 00:00:01 |
|* 22 | TABLE ACCESS BY INDEX ROWID | T_AR_RECMACTHLOGENTRY | 1 | 43 | 3 (0)| 00:00:01 |
|* 23 | INDEX UNIQUE SCAN | PK_AR_RECMACTHLOGENTRY | 1 | | 2 (0)| 00:00:01 |
|* 24 | TABLE ACCESS BY INDEX ROWID | T_AR_MATCKENTRY | 1 | 12 | 1 (0)| 00:00:01 |
|* 25 | INDEX UNIQUE SCAN | PK_AR_MATCKENTRY | 1 | | 0 (0)| 00:00:01 |
|* 26 | INDEX UNIQUE SCAN | PK_AR_MATCK | 1 | 5 | 0 (0)| 00:00:01 |
------------------------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - filter( NOT EXISTS (SELECT 0 FROM "T_AR_RECMACTHLOGENTRY" "TARR","T_AR_MATCK" "TARM","T_AR_MATCKENTRY"
"TARME" WHERE "TARR"."FSRCROWID"="TARME"."FENTRYID" AND "TARME"."FMATCHTYPE"='3' AND "TARM"."FID"="TARME"."FID"
AND "TARR"."FENTRYID"=:B1 AND "TARR"."FSOURCETYPE"='b9b2335770b84a3aa9b09b22767cd7e3'))
5 - access("AR"."FID"="PML"."FTARGETBILLID")
13 - access("FLOW"."FRECID"="ARE"."FENTRYID")
15 - access("ITEM_1"="AR"."FID")
17 - filter("PML"."FTARGETFROMID"='AR_receivable' AND "PML"."FSOURCEFROMID"<>'AR_RECEIVEBILL' AND
"PML"."FSOURCEFROMID"<>'AR_receivable' AND "PML"."FSOURCEFROMID"<>'AR_REFUNDBILL')
18 - access("PM"."FID"="PML"."FID")
19 - filter("PM"."FISACTIVATION"<>'0')
22 - filter("TARR"."FSOURCETYPE"='b9b2335770b84a3aa9b09b22767cd7e3')
23 - access("TARR"."FENTRYID"=:B1)
24 - filter("TARME"."FMATCHTYPE"='3')
25 - access("TARR"."FSRCROWID"="TARME"."FENTRYID")
26 - access("TARM"."FID"="TARME"."FID")
Note
-----
- dynamic statistics used: dynamic sampling (level=2)
- 5 Sql Plan Directives used for this statement
统计信息
----------------------------------------------------------
330 recursive calls
0 db block gets
126794 consistent gets
429 physical reads
0 redo size
813 bytes sent via SQL*Net to client
540 bytes received via SQL*Net from client
1 SQL*Net roundtrips to/from client
1 sorts (memory)
0 sorts (disk)
0 rows processed |
|