朋友给了一条SQL说跑8个小时才出结果,结果集很小75条数据,给他安排一下。

SQL如下:

SELECT DISTINCT T.XLA_TYPE,
T.XLA_CODE,
T.VENDOR_CODE,
T.VENDOR_NAME,
T.PERIOD_NAME,
T.BATCH_NAME,
T.DESCRIPTION,
T.INVOICE_AMOUNT,
NVL(T.BASE_AMOUNT, T.INVOICE_AMOUNT) BASE_AMOUNT,
T.INVOICE_NUM,
T.INVOICE_DATE,
T.INVOICE_TYPE,
T.CURRENCY_CODE,
T.LAST_NAME,
T.SEGMENT1,
T.CREATION_DATE,
T.LEDGER_ID,
T.ORG_ID,
T.CREATED_BY,
T.DOC_SEQUENCE_VALUE
FROM (SELECT '费用发票凭证' XLA_TYPE,
'B' XLA_CODE,
PV.SEGMENT1 VENDOR_CODE,
PV.VENDOR_NAME,
(SELECT AB.BATCH_NAME FROM AP_BATCHES_ALL AB WHERE AB.BATCH_ID = AI.BATCH_ID) BATCH_NAME,
AI.DOC_SEQUENCE_VALUE,
XAH.PERIOD_NAME,
XAH.ACCOUNTING_DATE,
AI.INVOICE_CURRENCY_CODE CURRENCY_CODE,
AI.DESCRIPTION,
AI.INVOICE_AMOUNT,
AI.BASE_AMOUNT,
AI.INVOICE_NUM,
AI.INVOICE_DATE,
(SELECT T.MEANING
FROM AA T
WHERE T.LOOKUP_TYPE = 'INVOICE TYPE'
AND T.LOOKUP_CODE = AI.INVOICE_TYPE_LOOKUP_CODE) INVOICE_TYPE,
PER.LAST_NAME,
(SELECT GCC.SEGMENT1
FROM BB XAL, CC GCC
WHERE XAL.AE_HEADER_ID = XAH.AE_HEADER_ID
AND XAL.CODE_COMBINATION_ID = GCC.CODE_COMBINATION_ID
AND ROWNUM = 1) SEGMENT1,
AI.CREATION_DATE,
XAH.LEDGER_ID,
AI.ORG_ID,
AI.CREATED_BY
FROM DD AI,
XLA.XLA_TRANSACTION_ENTITIES XTE,
XLA_EVENTS XE,
XLA_AE_HEADERS XAH,
AP_SUPPLIERS PV,
(SELECT F.USER_ID, P.LAST_NAME
FROM EE F, FF P
WHERE F.EMPLOYEE_ID = P.PERSON_ID) PER
WHERE AI.SET_OF_BOOKS_ID = XTE.LEDGER_ID
AND AI.INVOICE_ID = XTE.SOURCE_ID_INT_1
AND XTE.ENTITY_ID = XE.ENTITY_ID
AND XE.EVENT_ID = XAH.EVENT_ID
AND AI.VENDOR_ID = PV.VENDOR_ID
AND XAH.ACCOUNTING_ENTRY_STATUS_CODE = 'F'
AND XTE.ENTITY_CODE = 'AP_INVOICES'
AND AI.CREATED_BY = PER.USER_ID(+)
AND AI.INVOICE_TYPE_LOOKUP_CODE = 'EXPENSE REPORT'
AND AI.ORG_ID = :B5
AND XAH.LEDGER_ID = :B4
AND XAH.PERIOD_NAME = :B3
AND AI.INVOICE_CURRENCY_CODE = NVL(:B2, AI.INVOICE_CURRENCY_CODE)
AND :B1 = '费用发票'
AND NOT EXISTS
(SELECT 1
FROM GG XET
WHERE XET.LANGUAGE = 'ZHS'
AND XET.ENTITY_CODE LIKE 'AP_INVOICES'
AND XET.EVENT_CLASS_CODE = 'PREPAYMENT APPLICATIONS'
AND XET.EVENT_TYPE_CODE = XE.EVENT_TYPE_CODE
AND XET.APPLICATION_ID = XE.APPLICATION_ID)
UNION ALL
SELECT '预付款发票凭证' XLA_TYPE,
'A' XLA_CODE,
PV.SEGMENT1 VENDOR_CODE,
PV.VENDOR_NAME,
(SELECT AB.BATCH_NAME FROM AP_BATCHES_ALL AB WHERE AB.BATCH_ID = AI.BATCH_ID) BATCH_NAME,
AI.DOC_SEQUENCE_VALUE,
XAH.PERIOD_NAME,
XAH.ACCOUNTING_DATE,
AI.INVOICE_CURRENCY_CODE CURRENCY_CODE,
AI.DESCRIPTION,
AI.INVOICE_AMOUNT,
AI.BASE_AMOUNT,
AI.INVOICE_NUM,
AI.INVOICE_DATE,
(SELECT T.MEANING
FROM AA T
WHERE T.LOOKUP_TYPE = 'INVOICE TYPE'
AND T.LOOKUP_CODE = AI.INVOICE_TYPE_LOOKUP_CODE) INVOICE_TYPE,
PER.LAST_NAME,
(SELECT GCC.SEGMENT1
FROM BB XAL, CC GCC
WHERE XAL.AE_HEADER_ID = XAH.AE_HEADER_ID
AND XAL.CODE_COMBINATION_ID = GCC.CODE_COMBINATION_ID
AND ROWNUM = 1) SEGMENT1,
AI.CREATION_DATE,
XAH.LEDGER_ID,
AI.ORG_ID,
AI.CREATED_BY
FROM DD AI,
XLA.XLA_TRANSACTION_ENTITIES XTE,
XLA_EVENTS XE,
XLA_AE_HEADERS XAH,
AP_SUPPLIERS PV,
(SELECT F.USER_ID, P.LAST_NAME
FROM EE F, FF P
WHERE F.EMPLOYEE_ID = P.PERSON_ID) PER
WHERE AI.SET_OF_BOOKS_ID = XTE.LEDGER_ID
AND AI.INVOICE_ID = XTE.SOURCE_ID_INT_1
AND XTE.ENTITY_ID = XE.ENTITY_ID
AND XE.EVENT_ID = XAH.EVENT_ID
AND AI.VENDOR_ID = PV.VENDOR_ID
AND XAH.ACCOUNTING_ENTRY_STATUS_CODE = 'F'
AND XTE.ENTITY_CODE = 'AP_INVOICES'
AND AI.CREATED_BY = PER.USER_ID(+)
AND AI.INVOICE_TYPE_LOOKUP_CODE = 'PREPAYMENT'
AND AI.ORG_ID = :B5
AND XAH.LEDGER_ID = :B4
AND XAH.PERIOD_NAME = :B3
AND AI.INVOICE_CURRENCY_CODE = NVL(:B2, AI.INVOICE_CURRENCY_CODE)
AND :B1 = '预付款'
AND NOT EXISTS
(SELECT 1
FROM GG XET
WHERE XET.LANGUAGE = 'ZHS'
AND XET.ENTITY_CODE LIKE 'AP_INVOICES'
AND XET.EVENT_CLASS_CODE = 'PREPAYMENT APPLICATIONS'
AND XET.EVENT_TYPE_CODE = XE.EVENT_TYPE_CODE
AND XET.APPLICATION_ID = XE.APPLICATION_ID)
UNION ALL
SELECT '标准发票凭证' XLA_TYPE,
'C' XLA_CODE,
PV.SEGMENT1 VENDOR_CODE,
PV.VENDOR_NAME,
(SELECT AB.BATCH_NAME FROM AP_BATCHES_ALL AB WHERE AB.BATCH_ID = AI.BATCH_ID) BATCH_NAME,
AI.DOC_SEQUENCE_VALUE,
XAH.PERIOD_NAME,
XAH.ACCOUNTING_DATE,
AI.INVOICE_CURRENCY_CODE CURRENCY_CODE,
AI.DESCRIPTION,
AI.INVOICE_AMOUNT,
AI.BASE_AMOUNT,
AI.INVOICE_NUM,
AI.INVOICE_DATE,
(SELECT T.MEANING
FROM AA T
WHERE T.LOOKUP_TYPE = 'INVOICE TYPE'
AND T.LOOKUP_CODE = AI.INVOICE_TYPE_LOOKUP_CODE) INVOICE_TYPE,
PER.LAST_NAME,
(SELECT GCC.SEGMENT1
FROM BB XAL, CC GCC
WHERE XAL.AE_HEADER_ID = XAH.AE_HEADER_ID
AND XAL.CODE_COMBINATION_ID = GCC.CODE_COMBINATION_ID
AND ROWNUM = 1) SEGMENT1,
AI.CREATION_DATE,
XAH.LEDGER_ID,
AI.ORG_ID,
AI.CREATED_BY
FROM DD AI,
XLA.XLA_TRANSACTION_ENTITIES XTE,
XLA_EVENTS XE,
XLA_AE_HEADERS XAH,
AP_SUPPLIERS PV,
(SELECT F.USER_ID, P.LAST_NAME
FROM EE F, FF P
WHERE F.EMPLOYEE_ID = P.PERSON_ID) PER
WHERE AI.SET_OF_BOOKS_ID = XTE.LEDGER_ID
AND AI.INVOICE_ID = XTE.SOURCE_ID_INT_1
AND XTE.ENTITY_ID = XE.ENTITY_ID
AND XE.EVENT_ID = XAH.EVENT_ID
AND AI.VENDOR_ID = PV.VENDOR_ID
AND XAH.ACCOUNTING_ENTRY_STATUS_CODE = 'F'
AND XTE.ENTITY_CODE = 'AP_INVOICES'
AND AI.CREATED_BY = PER.USER_ID(+)
AND :B1 = '标准发票'
AND AI.INVOICE_TYPE_LOOKUP_CODE NOT IN
('EXPENSE REPORT', 'PREPAYMENT')
AND AI.ORG_ID = :B5
AND XAH.LEDGER_ID = :B4
AND XAH.PERIOD_NAME = :B3
AND AI.INVOICE_CURRENCY_CODE = NVL(:B2, AI.INVOICE_CURRENCY_CODE)
AND NOT EXISTS
(SELECT 1
FROM GG XET
WHERE XET.LANGUAGE = 'ZHS'
AND XET.ENTITY_CODE LIKE 'AP_INVOICES'
AND XET.EVENT_CLASS_CODE = 'PREPAYMENT APPLICATIONS'
AND XET.EVENT_TYPE_CODE = XE.EVENT_TYPE_CODE
AND XET.APPLICATION_ID = XE.APPLICATION_ID)) T
ORDER BY DOC_SEQUENCE_VALUE;

执行计划:

SQL_ID  0pkah9qp89a68, child number 0
-------------------------------------
SELECT DISTINCT T.XLA_TYPE, T.XLA_CODE, T.VENDOR_CODE, T.VENDOR_NAME,
T.PERIOD_NAME, T.BATCH_NAME, T.DESCRIPTION, T.INVOICE_AMOUNT,
NVL(T.BASE_AMOUNT, T.INVOICE_AMOUNT) BASE_AMOUNT, T.INVOICE_NUM,
T.INVOICE_DATE, T.INVOICE_TYPE, T.CURRENCY_CODE, T.LAST_NAME,
T.SEGMENT1, T.CREATION_DATE, T.LEDGER_ID, T.ORG_ID, T.CREATED_BY ,
T.DOC_SEQUENCE_VALUE FROM ( SELECT '费用发票凭证' XLA_TYPE, 'B' XLA_CODE,
PV.SEGMENT1 VENDOR_CODE, PV.VENDOR_NAME, (SELECT AB.BATCH_NAME FROM
AP_BATCHES_ALL AB WHERE AB.BATCH_ID = AI.BATCH_ID) BATCH_NAME,
AI.DOC_SEQUENCE_VALUE , XAH.PERIOD_NAME, XAH.ACCOUNTING_DATE ,
AI.INVOICE_CURRENCY_CODE CURRENCY_CODE, AI.DESCRIPTION,
AI.INVOICE_AMOUNT, AI.BASE_AMOUNT, AI.INVOICE_NUM, AI.INVOICE_DATE,
(SELECT T.MEANING FROM AA T WHERE T.LOOKUP_TYPE =
'INVOICE TYPE' AND T.LOOKUP_CODE = AI.INVOICE_TYPE_LOOKUP_CODE)
INVOICE_TYPE, PER.LAST_NAME, (SELECT GCC.SEGMENT1 FROM BB
XAL, CC GCC WHERE XAL.AE_HEADER_ID =
XAH.AE_HEADER_I Plan hash value: 801427799 -----------------------------------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | Pstart| Pstop |
-----------------------------------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | | | 2577K(100)| | | |
| 1 | SORT UNIQUE | | 42 | 14028 | 2577K (1)| 08:35:34 | | |
| 2 | VIEW | | 42 | 14028 | 2577K (1)| 08:35:34 | | |
| 3 | UNION-ALL | | | | | | | |
| 4 | TABLE ACCESS BY INDEX ROWID | AP_BATCHES_ALL | 1 | 27 | 2 (0)| 00:00:01 | | |
|* 5 | INDEX UNIQUE SCAN | AP_BATCHES_U1 | 1 | | 1 (0)| 00:00:01 | | |
| 6 | TABLE ACCESS BY INDEX ROWID | FND_LOOKUP_VALUES | 1 | 52 | 4 (0)| 00:00:01 | | |
|* 7 | INDEX RANGE SCAN | FND_LOOKUP_VALUES_U1 | 1 | | 3 (0)| 00:00:01 | | |
|* 8 | COUNT STOPKEY | | | | | | | |
| 9 | NESTED LOOPS | | 2 | 42 | 63 (0)| 00:00:01 | | |
| 10 | NESTED LOOPS | | 2 | 42 | 63 (0)| 00:00:01 | | |
| 11 | PARTITION LIST ALL | | 2 | 24 | 59 (0)| 00:00:01 | 1 | 19 |
| 12 | TABLE ACCESS BY LOCAL INDEX ROWID | BB | 2 | 24 | 59 (0)| 00:00:01 | 1 | 19 |
|* 13 | INDEX RANGE SCAN | BB_U1 | 2 | | 58 (0)| 00:00:01 | 1 | 19 |
|* 14 | INDEX UNIQUE SCAN | GL_CODE_COMBINATIONS_U1 | 1 | | 1 (0)| 00:00:01 | | |
| 15 | TABLE ACCESS BY INDEX ROWID | GL_CODE_COMBINATIONS | 1 | 9 | 2 (0)| 00:00:01 | | |
|* 16 | FILTER | | | | | | | |
| 17 | NESTED LOOPS ANTI | | 7 | 2898 | 641K (1)| 02:08:15 | | |
| 18 | NESTED LOOPS | | 7 | 2506 | 641K (1)| 02:08:15 | | |
| 19 | NESTED LOOPS OUTER | | 7 | 2219 | 641K (1)| 02:08:15 | | |
| 20 | NESTED LOOPS | | 7 | 1666 | 641K (1)| 02:08:15 | | |
| 21 | NESTED LOOPS | | 1850 | 379K| 533K (1)| 01:46:46 | | |
|* 22 | HASH JOIN | | 1707 | 300K| 434K (2)| 01:26:57 | | |
|* 23 | TABLE ACCESS BY INDEX ROWID | DD | 1707 | 236K| 2854 (1)| 00:00:35 | | |
|* 24 | INDEX RANGE SCAN | AP_INVOICES_N21 | 10244 | | 47 (0)| 00:00:01 | | |
| 25 | PARTITION LIST ALL | | 230K| 8537K| 431K (2)| 01:26:23 | 1 | 19 |
|* 26 | TABLE ACCESS FULL | XLA_TRANSACTION_ENTITIES | 230K| 8537K| 431K (2)| 01:26:23 | 1 | 19 |
| 27 | PARTITION LIST ALL | | 1 | 30 | 58 (0)| 00:00:01 | 1 | 19 |
| 28 | TABLE ACCESS BY LOCAL INDEX ROWID | XLA_EVENTS | 1 | 30 | 58 (0)| 00:00:01 | 1 | 19 |
|* 29 | INDEX RANGE SCAN | XLA_EVENTS_U2 | 1 | | 57 (0)| 00:00:01 | 1 | 19 |
| 30 | PARTITION LIST ALL | | 1 | 28 | 58 (0)| 00:00:01 | 1 | 19 |
|* 31 | TABLE ACCESS BY LOCAL INDEX ROWID | XLA_AE_HEADERS | 1 | 28 | 58 (0)| 00:00:01 | 1 | 19 |
|* 32 | INDEX RANGE SCAN | XLA_AE_HEADERS_N2 | 1 | | 57 (0)| 00:00:01 | 1 | 19 |
| 33 | VIEW PUSHED PREDICATE | | 1 | 79 | 5 (0)| 00:00:01 | | |
| 34 | NESTED LOOPS | | 1 | 40 | 5 (0)| 00:00:01 | | |
|* 35 | TABLE ACCESS BY INDEX ROWID | EE | 1 | 8 | 2 (0)| 00:00:01 | | |
|* 36 | INDEX UNIQUE SCAN | EE_U1 | 1 | | 1 (0)| 00:00:01 | | |
|* 37 | TABLE ACCESS BY INDEX ROWID | PER_ALL_PEOPLE_F | 1 | 32 | 3 (0)| 00:00:01 | | |
|* 38 | INDEX RANGE SCAN | FF_PK | 2 | | 1 (0)| 00:00:01 | | |
| 39 | TABLE ACCESS BY INDEX ROWID | AP_SUPPLIERS | 1 | 41 | 1 (0)| 00:00:01 | | |
|* 40 | INDEX UNIQUE SCAN | AP_SUPPLIERS_U1 | 1 | | 0 (0)| | | |
|* 41 | INDEX RANGE SCAN | GG_U1 | 1 | 56 | 1 (0)| 00:00:01 | | |
| 42 | TABLE ACCESS BY INDEX ROWID | AP_BATCHES_ALL | 1 | 27 | 2 (0)| 00:00:01 | | |
|* 43 | INDEX UNIQUE SCAN | AP_BATCHES_U1 | 1 | | 1 (0)| 00:00:01 | | |
| 44 | TABLE ACCESS BY INDEX ROWID | FND_LOOKUP_VALUES | 1 | 52 | 4 (0)| 00:00:01 | | |
|* 45 | INDEX RANGE SCAN | FND_LOOKUP_VALUES_U1 | 1 | | 3 (0)| 00:00:01 | | |
|* 46 | COUNT STOPKEY | | | | | | | |
| 47 | NESTED LOOPS | | 2 | 42 | 63 (0)| 00:00:01 | | |
| 48 | NESTED LOOPS | | 2 | 42 | 63 (0)| 00:00:01 | | |
| 49 | PARTITION LIST ALL | | 2 | 24 | 59 (0)| 00:00:01 | 1 | 19 |
| 50 | TABLE ACCESS BY LOCAL INDEX ROWID | BB | 2 | 24 | 59 (0)| 00:00:01 | 1 | 19 |
|* 51 | INDEX RANGE SCAN | BB_U1 | 2 | | 58 (0)| 00:00:01 | 1 | 19 |
|* 52 | INDEX UNIQUE SCAN | GL_CODE_COMBINATIONS_U1 | 1 | | 1 (0)| 00:00:01 | | |
| 53 | TABLE ACCESS BY INDEX ROWID | GL_CODE_COMBINATIONS | 1 | 9 | 2 (0)| 00:00:01 | | |
|* 54 | FILTER | | | | | | | |
| 55 | NESTED LOOPS ANTI | | 7 | 2898 | 641K (1)| 02:08:15 | | |
| 56 | NESTED LOOPS | | 7 | 2506 | 641K (1)| 02:08:15 | | |
| 57 | NESTED LOOPS OUTER | | 7 | 2219 | 641K (1)| 02:08:15 | | |
| 58 | NESTED LOOPS | | 7 | 1666 | 641K (1)| 02:08:15 | | |
| 59 | NESTED LOOPS | | 1850 | 379K| 533K (1)| 01:46:46 | | |
|* 60 | HASH JOIN | | 1707 | 300K| 434K (2)| 01:26:57 | | |
|* 61 | TABLE ACCESS BY INDEX ROWID | DD | 1707 | 236K| 2854 (1)| 00:00:35 | | |
|* 62 | INDEX RANGE SCAN | AP_INVOICES_N21 | 10244 | | 47 (0)| 00:00:01 | | |
| 63 | PARTITION LIST ALL | | 230K| 8537K| 431K (2)| 01:26:23 | 1 | 19 |
|* 64 | TABLE ACCESS FULL | XLA_TRANSACTION_ENTITIES | 230K| 8537K| 431K (2)| 01:26:23 | 1 | 19 |
| 65 | PARTITION LIST ALL | | 1 | 30 | 58 (0)| 00:00:01 | 1 | 19 |
| 66 | TABLE ACCESS BY LOCAL INDEX ROWID | XLA_EVENTS | 1 | 30 | 58 (0)| 00:00:01 | 1 | 19 |
|* 67 | INDEX RANGE SCAN | XLA_EVENTS_U2 | 1 | | 57 (0)| 00:00:01 | 1 | 19 |
| 68 | PARTITION LIST ALL | | 1 | 28 | 58 (0)| 00:00:01 | 1 | 19 |
|* 69 | TABLE ACCESS BY LOCAL INDEX ROWID | XLA_AE_HEADERS | 1 | 28 | 58 (0)| 00:00:01 | 1 | 19 |
|* 70 | INDEX RANGE SCAN | XLA_AE_HEADERS_N2 | 1 | | 57 (0)| 00:00:01 | 1 | 19 |
| 71 | VIEW PUSHED PREDICATE | | 1 | 79 | 5 (0)| 00:00:01 | | |
| 72 | NESTED LOOPS | | 1 | 40 | 5 (0)| 00:00:01 | | |
|* 73 | TABLE ACCESS BY INDEX ROWID | EE | 1 | 8 | 2 (0)| 00:00:01 | | |
|* 74 | INDEX UNIQUE SCAN | EE_U1 | 1 | | 1 (0)| 00:00:01 | | |
|* 75 | TABLE ACCESS BY INDEX ROWID | PER_ALL_PEOPLE_F | 1 | 32 | 3 (0)| 00:00:01 | | |
|* 76 | INDEX RANGE SCAN | FF_PK | 2 | | 1 (0)| 00:00:01 | | |
| 77 | TABLE ACCESS BY INDEX ROWID | AP_SUPPLIERS | 1 | 41 | 1 (0)| 00:00:01 | | |
|* 78 | INDEX UNIQUE SCAN | AP_SUPPLIERS_U1 | 1 | | 0 (0)| | | |
|* 79 | INDEX RANGE SCAN | GG_U1 | 1 | 56 | 1 (0)| 00:00:01 | | |
| 80 | TABLE ACCESS BY INDEX ROWID | AP_BATCHES_ALL | 1 | 27 | 2 (0)| 00:00:01 | | |
|* 81 | INDEX UNIQUE SCAN | AP_BATCHES_U1 | 1 | | 1 (0)| 00:00:01 | | |
| 82 | TABLE ACCESS BY INDEX ROWID | FND_LOOKUP_VALUES | 1 | 52 | 4 (0)| 00:00:01 | | |
|* 83 | INDEX RANGE SCAN | FND_LOOKUP_VALUES_U1 | 1 | | 3 (0)| 00:00:01 | | |
|* 84 | COUNT STOPKEY | | | | | | | |
| 85 | NESTED LOOPS | | 2 | 42 | 63 (0)| 00:00:01 | | |
| 86 | NESTED LOOPS | | 2 | 42 | 63 (0)| 00:00:01 | | |
| 87 | PARTITION LIST ALL | | 2 | 24 | 59 (0)| 00:00:01 | 1 | 19 |
| 88 | TABLE ACCESS BY LOCAL INDEX ROWID | BB | 2 | 24 | 59 (0)| 00:00:01 | 1 | 19 |
|* 89 | INDEX RANGE SCAN | BB_U1 | 2 | | 58 (0)| 00:00:01 | 1 | 19 |
|* 90 | INDEX UNIQUE SCAN | GL_CODE_COMBINATIONS_U1 | 1 | | 1 (0)| 00:00:01 | | |
| 91 | TABLE ACCESS BY INDEX ROWID | GL_CODE_COMBINATIONS | 1 | 9 | 2 (0)| 00:00:01 | | |
|* 92 | FILTER | | | | | | | |
|* 93 | HASH JOIN RIGHT ANTI | | 28 | 11592 | 1295K (1)| 04:19:05 | | |
|* 94 | TABLE ACCESS FULL | GG | 1 | 56 | 13 (0)| 00:00:01 | | |
| 95 | NESTED LOOPS | | 28 | 10024 | 1295K (1)| 04:19:05 | | |
| 96 | NESTED LOOPS | | 28 | 10024 | 1295K (1)| 04:19:05 | | |
| 97 | NESTED LOOPS OUTER | | 28 | 8876 | 1295K (1)| 04:19:04 | | |
| 98 | NESTED LOOPS | | 28 | 6664 | 1295K (1)| 04:19:03 | | |
| 99 | NESTED LOOPS | | 7710 | 1581K| 847K (1)| 02:49:33 | | |
|*100 | HASH JOIN | | 7114 | 1250K| 434K (2)| 01:26:57 | | |
|*101 | TABLE ACCESS BY INDEX ROWID | DD | 7114 | 986K| 2854 (1)| 00:00:35 | | |
|*102 | INDEX RANGE SCAN | AP_INVOICES_N21 | 10244 | | 47 (0)| 00:00:01 | | |
| 103 | PARTITION LIST ALL | | 230K| 8537K| 431K (2)| 01:26:23 | 1 | 19 |
|*104 | TABLE ACCESS FULL | XLA_TRANSACTION_ENTITIES | 230K| 8537K| 431K (2)| 01:26:23 | 1 | 19 |
| 105 | PARTITION LIST ALL | | 1 | 30 | 58 (0)| 00:00:01 | 1 | 19 |
| 106 | TABLE ACCESS BY LOCAL INDEX ROWID| XLA_EVENTS | 1 | 30 | 58 (0)| 00:00:01 | 1 | 19 |
|*107 | INDEX RANGE SCAN | XLA_EVENTS_U2 | 1 | | 57 (0)| 00:00:01 | 1 | 19 |
| 108 | PARTITION LIST ALL | | 1 | 28 | 58 (0)| 00:00:01 | 1 | 19 |
|*109 | TABLE ACCESS BY LOCAL INDEX ROWID | XLA_AE_HEADERS | 1 | 28 | 58 (0)| 00:00:01 | 1 | 19 |
|*110 | INDEX RANGE SCAN | XLA_AE_HEADERS_N2 | 1 | | 57 (0)| 00:00:01 | 1 | 19 |
| 111 | VIEW PUSHED PREDICATE | | 1 | 79 | 5 (0)| 00:00:01 | | |
| 112 | NESTED LOOPS | | 1 | 40 | 5 (0)| 00:00:01 | | |
|*113 | TABLE ACCESS BY INDEX ROWID | EE | 1 | 8 | 2 (0)| 00:00:01 | | |
|*114 | INDEX UNIQUE SCAN | EE_U1 | 1 | | 1 (0)| 00:00:01 | | |
|*115 | TABLE ACCESS BY INDEX ROWID | PER_ALL_PEOPLE_F | 1 | 32 | 3 (0)| 00:00:01 | | |
|*116 | INDEX RANGE SCAN | FF_PK | 2 | | 1 (0)| 00:00:01 | | |
|*117 | INDEX UNIQUE SCAN | AP_SUPPLIERS_U1 | 1 | | 0 (0)| | | |
| 118 | TABLE ACCESS BY INDEX ROWID | AP_SUPPLIERS | 1 | 41 | 1 (0)| 00:00:01 | | |
----------------------------------------------------------------------------------------------------------------------------------------- Predicate Information (identified by operation id):
--------------------------------------------------- 5 - access("AB"."BATCH_ID"=:B1)
7 - access("B"."LOOKUP_TYPE"='INVOICE TYPE' AND "B"."LOOKUP_CODE"=:B1 AND "B"."LANGUAGE"=USERENV('LANG'))
filter(("B"."LOOKUP_CODE"=:B1 AND "B"."LANGUAGE"=USERENV('LANG')))
8 - filter(ROWNUM=1)
13 - access("XAL"."AE_HEADER_ID"=:B1)
14 - access("XAL"."CODE_COMBINATION_ID"="CODE_COMBINATION_ID")
16 - filter(:B1='费用发票')
22 - access("AI"."SET_OF_BOOKS_ID"="XTE"."LEDGER_ID" AND "AI"."INVOICE_ID"="XTE"."SOURCE_ID_INT_1")
23 - filter(("AI"."INVOICE_TYPE_LOOKUP_CODE"='EXPENSE REPORT' AND
"AI"."INVOICE_CURRENCY_CODE"=NVL(:B2,"AI"."INVOICE_CURRENCY_CODE")))
24 - access("AI"."ORG_ID"=:B5)
26 - filter("XTE"."ENTITY_CODE"='AP_INVOICES')
29 - access("XTE"."ENTITY_ID"="XE"."ENTITY_ID")
31 - filter(("XAH"."PERIOD_NAME"=:B3 AND "XAH"."ACCOUNTING_ENTRY_STATUS_CODE"='F'))
32 - access("XE"."EVENT_ID"="XAH"."EVENT_ID" AND "XAH"."LEDGER_ID"=:B4)
35 - filter("F"."EMPLOYEE_ID" IS NOT NULL)
36 - access("F"."USER_ID"="AI"."CREATED_BY")
37 - filter((DECODE("HR_SECURITY"."VIEW_ALL"(),'Y','TRUE',"HR_SECURITY"."SHOW_PERSON"("PAP"."PERSON_ID","PAP"."CURRENT_APPLICAN
T_FLAG","PAP"."CURRENT_EMPLOYEE_FLAG","PAP"."CURRENT_NPW_FLAG","PAP"."EMPLOYEE_NUMBER","PAP"."APPLICANT_NUMBER","PAP"."NPW_NUMBER
"))='TRUE' AND "PAP"."BUSINESS_GROUP_ID"=DECODE("HR_GENERAL"."GET_XBG_PROFILE"(),'Y',"PAP"."BUSINESS_GROUP_ID","HR_GENERAL"."GET_
BUSINESS_GROUP_ID"())))
38 - access("F"."EMPLOYEE_ID"="PERSON_ID")
40 - access("AI"."VENDOR_ID"="PV"."VENDOR_ID")
41 - access("XET"."APPLICATION_ID"="XE"."APPLICATION_ID" AND "XET"."ENTITY_CODE" LIKE 'AP_INVOICES' AND
"XET"."EVENT_CLASS_CODE"='PREPAYMENT APPLICATIONS' AND "XET"."EVENT_TYPE_CODE"="XE"."EVENT_TYPE_CODE" AND "XET"."LANGUAGE"='ZHS')
filter(("XET"."EVENT_CLASS_CODE"='PREPAYMENT APPLICATIONS' AND "XET"."LANGUAGE"='ZHS' AND "XET"."ENTITY_CODE" LIKE
'AP_INVOICES' AND "XET"."EVENT_TYPE_CODE"="XE"."EVENT_TYPE_CODE"))
43 - access("AB"."BATCH_ID"=:B1)
45 - access("B"."LOOKUP_TYPE"='INVOICE TYPE' AND "B"."LOOKUP_CODE"=:B1 AND "B"."LANGUAGE"=USERENV('LANG'))
filter(("B"."LOOKUP_CODE"=:B1 AND "B"."LANGUAGE"=USERENV('LANG')))
46 - filter(ROWNUM=1)
51 - access("XAL"."AE_HEADER_ID"=:B1)
52 - access("XAL"."CODE_COMBINATION_ID"="CODE_COMBINATION_ID")
54 - filter(:B1='预付款')
60 - access("AI"."SET_OF_BOOKS_ID"="XTE"."LEDGER_ID" AND "AI"."INVOICE_ID"="XTE"."SOURCE_ID_INT_1")
61 - filter(("AI"."INVOICE_TYPE_LOOKUP_CODE"='PREPAYMENT' AND "AI"."INVOICE_CURRENCY_CODE"=NVL(:B2,"AI"."INVOICE_CURRENCY_CODE"
)))
62 - access("AI"."ORG_ID"=:B5)
64 - filter("XTE"."ENTITY_CODE"='AP_INVOICES')
67 - access("XTE"."ENTITY_ID"="XE"."ENTITY_ID")
69 - filter(("XAH"."PERIOD_NAME"=:B3 AND "XAH"."ACCOUNTING_ENTRY_STATUS_CODE"='F'))
70 - access("XE"."EVENT_ID"="XAH"."EVENT_ID" AND "XAH"."LEDGER_ID"=:B4)
73 - filter("F"."EMPLOYEE_ID" IS NOT NULL)
74 - access("F"."USER_ID"="AI"."CREATED_BY")
75 - filter((DECODE("HR_SECURITY"."VIEW_ALL"(),'Y','TRUE',"HR_SECURITY"."SHOW_PERSON"("PAP"."PERSON_ID","PAP"."CURRENT_APPLICAN
T_FLAG","PAP"."CURRENT_EMPLOYEE_FLAG","PAP"."CURRENT_NPW_FLAG","PAP"."EMPLOYEE_NUMBER","PAP"."APPLICANT_NUMBER","PAP"."NPW_NUMBER
"))='TRUE' AND "PAP"."BUSINESS_GROUP_ID"=DECODE("HR_GENERAL"."GET_XBG_PROFILE"(),'Y',"PAP"."BUSINESS_GROUP_ID","HR_GENERAL"."GET_
BUSINESS_GROUP_ID"())))
76 - access("F"."EMPLOYEE_ID"="PERSON_ID")
78 - access("AI"."VENDOR_ID"="PV"."VENDOR_ID")
79 - access("XET"."APPLICATION_ID"="XE"."APPLICATION_ID" AND "XET"."ENTITY_CODE" LIKE 'AP_INVOICES' AND
"XET"."EVENT_CLASS_CODE"='PREPAYMENT APPLICATIONS' AND "XET"."EVENT_TYPE_CODE"="XE"."EVENT_TYPE_CODE" AND "XET"."LANGUAGE"='ZHS')
filter(("XET"."EVENT_CLASS_CODE"='PREPAYMENT APPLICATIONS' AND "XET"."LANGUAGE"='ZHS' AND "XET"."ENTITY_CODE" LIKE
'AP_INVOICES' AND "XET"."EVENT_TYPE_CODE"="XE"."EVENT_TYPE_CODE"))
81 - access("AB"."BATCH_ID"=:B1)
83 - access("B"."LOOKUP_TYPE"='INVOICE TYPE' AND "B"."LOOKUP_CODE"=:B1 AND "B"."LANGUAGE"=USERENV('LANG'))
filter(("B"."LOOKUP_CODE"=:B1 AND "B"."LANGUAGE"=USERENV('LANG')))
84 - filter(ROWNUM=1)
89 - access("XAL"."AE_HEADER_ID"=:B1)
90 - access("XAL"."CODE_COMBINATION_ID"="CODE_COMBINATION_ID")
92 - filter(:B1='标准发票')
93 - access("XET"."EVENT_TYPE_CODE"="XE"."EVENT_TYPE_CODE" AND "XET"."APPLICATION_ID"="XE"."APPLICATION_ID")
94 - filter(("XET"."EVENT_CLASS_CODE"='PREPAYMENT APPLICATIONS' AND "XET"."LANGUAGE"='ZHS' AND "XET"."ENTITY_CODE" LIKE
'AP_INVOICES'))
100 - access("AI"."SET_OF_BOOKS_ID"="XTE"."LEDGER_ID" AND "AI"."INVOICE_ID"="XTE"."SOURCE_ID_INT_1")
101 - filter(("AI"."INVOICE_TYPE_LOOKUP_CODE"<>'EXPENSE REPORT' AND "AI"."INVOICE_TYPE_LOOKUP_CODE"<>'PREPAYMENT' AND
"AI"."INVOICE_CURRENCY_CODE"=NVL(:B2,"AI"."INVOICE_CURRENCY_CODE")))
102 - access("AI"."ORG_ID"=:B5)
104 - filter("XTE"."ENTITY_CODE"='AP_INVOICES')
107 - access("XTE"."ENTITY_ID"="XE"."ENTITY_ID")
109 - filter(("XAH"."PERIOD_NAME"=:B3 AND "XAH"."ACCOUNTING_ENTRY_STATUS_CODE"='F'))
110 - access("XE"."EVENT_ID"="XAH"."EVENT_ID" AND "XAH"."LEDGER_ID"=:B4)
113 - filter("F"."EMPLOYEE_ID" IS NOT NULL)
114 - access("F"."USER_ID"="AI"."CREATED_BY")
115 - filter((DECODE("HR_SECURITY"."VIEW_ALL"(),'Y','TRUE',"HR_SECURITY"."SHOW_PERSON"("PAP"."PERSON_ID","PAP"."CURRENT_APPLICAN
T_FLAG","PAP"."CURRENT_EMPLOYEE_FLAG","PAP"."CURRENT_NPW_FLAG","PAP"."EMPLOYEE_NUMBER","PAP"."APPLICANT_NUMBER","PAP"."NPW_NUMBER
"))='TRUE' AND "PAP"."BUSINESS_GROUP_ID"=DECODE("HR_GENERAL"."GET_XBG_PROFILE"(),'Y',"PAP"."BUSINESS_GROUP_ID","HR_GENERAL"."GET_
BUSINESS_GROUP_ID"())))
116 - access("F"."EMPLOYEE_ID"="PERSON_ID")
117 - access("AI"."VENDOR_ID"="PV"."VENDOR_ID")

粗略看了一下SQL大概知道语义内容,瞄了一眼执行计划,大概知道问题所在的地方,让他加了一条hint 再跑一下这条SQL。

SELECT /*+MERGE(T)*/ DISTINCT T.XLA_TYPE,
T.XLA_CODE,
T.VENDOR_CODE,
T.VENDOR_NAME,
T.PERIOD_NAME,
T.BATCH_NAME,
T.DESCRIPTION,
T.INVOICE_AMOUNT,
NVL(T.BASE_AMOUNT, T.INVOICE_AMOUNT) BASE_AMOUNT,
T.INVOICE_NUM,
T.INVOICE_DATE,
T.INVOICE_TYPE,
T.CURRENCY_CODE,
T.LAST_NAME,
T.SEGMENT1,
T.CREATION_DATE,
T.LEDGER_ID,
T.ORG_ID,
T.CREATED_BY,
T.DOC_SEQUENCE_VALUE
FROM (SELECT '费用发票凭证' XLA_TYPE.... 后面内容省略,啥都没改。

执行计划:

Plan hash value: 3618802827

    -------------------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time
-------------------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | | 0 |00:00:00.17
| 1 | SORT UNIQUE | | 1 | 8 | 0 |00:00:00.17
| 2 | VIEW | | 1 | 8 | 0 |00:00:00.17
| 3 | UNION-ALL | | 1 | | 0 |00:00:00.17
| 4 | TABLE ACCESS BY INDEX ROWID | AP_BATCHES_ALL | 0 | 1 | 0 |00:00:00.01
|* 5 | INDEX UNIQUE SCAN | AP_BATCHES_U1 | 0 | 1 | 0 |00:00:00.01
| 6 | TABLE ACCESS BY INDEX ROWID | FND_LOOKUP_VALUES | 0 | 1 | 0 |00:00:00.01
|* 7 | INDEX RANGE SCAN | FND_LOOKUP_VALUES_U1 | 0 | 1 | 0 |00:00:00.01
|* 8 | COUNT STOPKEY | | 0 | | 0 |00:00:00.01
| 9 | NESTED LOOPS | | 0 | 2 | 0 |00:00:00.01
| 10 | NESTED LOOPS | | 0 | 2 | 0 |00:00:00.01
| 11 | PARTITION LIST ALL | | 0 | 2 | 0 |00:00:00.01
| 12 | TABLE ACCESS BY LOCAL INDEX ROWID | BB | 0 | 2 | 0 |00:00:00.01
|* 13 | INDEX RANGE SCAN | BB_U1 | 0 | 2 | 0 |00:00:00.01
|* 14 | INDEX UNIQUE SCAN | GL_CODE_COMBINATIONS_U1 | 0 | 1 | 0 |00:00:00.01
| 15 | TABLE ACCESS BY INDEX ROWID | GL_CODE_COMBINATIONS | 0 | 1 | 0 |00:00:00.01
| 16 | NESTED LOOPS OUTER | | 1 | 1 | 0 |00:00:00.08
| 17 | NESTED LOOPS | | 1 | 1 | 0 |00:00:00.08
| 18 | NESTED LOOPS ANTI | | 1 | 1 | 0 |00:00:00.08
| 19 | NESTED LOOPS | | 1 | 1 | 0 |00:00:00.08
| 20 | NESTED LOOPS | | 1 | 461 | 1038 |00:00:00.04
| 21 | NESTED LOOPS | | 1 | 426 | 741 |00:00:00.01
|* 22 | TABLE ACCESS BY INDEX ROWID | DD | 1 | 426 | 741 |00:00:00.01
|* 23 | INDEX SKIP SCAN | AP_INVOICES_N3 | 1 | 10291 | 1429 |00:00:00.01
|* 24 | TABLE ACCESS BY GLOBAL INDEX ROWID| XLA_TRANSACTION_ENTITIES | 741 | 1 | 741 |00:00:00.01
|* 25 | INDEX RANGE SCAN | XLA_TRANSACTION_ENTITIES_N2 | 741 | 1 | 744 |00:00:00.01
| 26 | PARTITION LIST ALL | | 741 | 1 | 1038 |00:00:00.03
| 27 | TABLE ACCESS BY LOCAL INDEX ROWID | XLA_EVENTS | 14079 | 1 | 1038 |00:00:00.03
|* 28 | INDEX RANGE SCAN | XLA_EVENTS_U2 | 14079 | 1 | 1038 |00:00:00.02
| 29 | PARTITION LIST ALL | | 1038 | 1 | 0 |00:00:00.04
|* 30 | TABLE ACCESS BY LOCAL INDEX ROWID | XLA_AE_HEADERS | 19722 | 1 | 0 |00:00:00.04
|* 31 | INDEX RANGE SCAN | XLA_AE_HEADERS_N2 | 19722 | 1 | 0 |00:00:00.03
|* 32 | INDEX RANGE SCAN | GG_U1 | 0 | 1 | 0 |00:00:00.01
| 33 | TABLE ACCESS BY INDEX ROWID | AP_SUPPLIERS | 0 | 1 | 0 |00:00:00.01
|* 34 | INDEX UNIQUE SCAN | AP_SUPPLIERS_U1 | 0 | 1 | 0 |00:00:00.01
| 35 | VIEW PUSHED PREDICATE | | 0 | 1 | 0 |00:00:00.01
| 36 | NESTED LOOPS | | 0 | 1 | 0 |00:00:00.01
|* 37 | TABLE ACCESS BY INDEX ROWID | EE | 0 | 1 | 0 |00:00:00.01
|* 38 | INDEX UNIQUE SCAN | EE_U1 | 0 | 1 | 0 |00:00:00.01
|* 39 | TABLE ACCESS BY INDEX ROWID | PER_ALL_PEOPLE_F | 0 | 1 | 0 |00:00:00.01
|* 40 | INDEX RANGE SCAN | FF_PK | 0 | 2 | 0 |00:00:00.01
| 41 | TABLE ACCESS BY INDEX ROWID | AP_BATCHES_ALL | 0 | 1 | 0 |00:00:00.01
|* 42 | INDEX UNIQUE SCAN | AP_BATCHES_U1 | 0 | 1 | 0 |00:00:00.01
| 43 | TABLE ACCESS BY INDEX ROWID | FND_LOOKUP_VALUES | 0 | 1 | 0 |00:00:00.01
|* 44 | INDEX RANGE SCAN | FND_LOOKUP_VALUES_U1 | 0 | 1 | 0 |00:00:00.01
|* 45 | COUNT STOPKEY | | 0 | | 0 |00:00:00.01
| 46 | NESTED LOOPS | | 0 | 2 | 0 |00:00:00.01
| 47 | NESTED LOOPS | | 0 | 2 | 0 |00:00:00.01
| 48 | PARTITION LIST ALL | | 0 | 2 | 0 |00:00:00.01
| 49 | TABLE ACCESS BY LOCAL INDEX ROWID | BB | 0 | 2 | 0 |00:00:00.01
|* 50 | INDEX RANGE SCAN | BB_U1 | 0 | 2 | 0 |00:00:00.01
|* 51 | INDEX UNIQUE SCAN | GL_CODE_COMBINATIONS_U1 | 0 | 1 | 0 |00:00:00.01
| 52 | TABLE ACCESS BY INDEX ROWID | GL_CODE_COMBINATIONS | 0 | 1 | 0 |00:00:00.01
| 53 | NESTED LOOPS OUTER | | 1 | 1 | 0 |00:00:00.06
| 54 | NESTED LOOPS | | 1 | 1 | 0 |00:00:00.06
| 55 | NESTED LOOPS ANTI | | 1 | 1 | 0 |00:00:00.06
| 56 | NESTED LOOPS | | 1 | 1 | 0 |00:00:00.06
| 57 | NESTED LOOPS | | 1 | 461 | 470 |00:00:00.03
| 58 | NESTED LOOPS | | 1 | 426 | 454 |00:00:00.01
|* 59 | TABLE ACCESS BY INDEX ROWID | DD | 1 | 426 | 454 |00:00:00.01
|* 60 | INDEX SKIP SCAN | AP_INVOICES_N3 | 1 | 10291 | 1429 |00:00:00.01
|* 61 | TABLE ACCESS BY GLOBAL INDEX ROWID| XLA_TRANSACTION_ENTITIES | 454 | 1 | 454 |00:00:00.01
|* 62 | INDEX RANGE SCAN | XLA_TRANSACTION_ENTITIES_N2 | 454 | 1 | 454 |00:00:00.01
| 63 | PARTITION LIST ALL | | 454 | 1 | 470 |00:00:00.03
| 64 | TABLE ACCESS BY LOCAL INDEX ROWID | XLA_EVENTS | 8626 | 1 | 470 |00:00:00.02
|* 65 | INDEX RANGE SCAN | XLA_EVENTS_U2 | 8626 | 1 | 470 |00:00:00.02
| 66 | PARTITION LIST ALL | | 470 | 1 | 0 |00:00:00.02
|* 67 | TABLE ACCESS BY LOCAL INDEX ROWID | XLA_AE_HEADERS | 8930 | 1 | 0 |00:00:00.02
|* 68 | INDEX RANGE SCAN | XLA_AE_HEADERS_N2 | 8930 | 1 | 0 |00:00:00.02
|* 69 | INDEX RANGE SCAN | GG_U1 | 0 | 1 | 0 |00:00:00.01
| 70 | TABLE ACCESS BY INDEX ROWID | AP_SUPPLIERS | 0 | 1 | 0 |00:00:00.01
|* 71 | INDEX UNIQUE SCAN | AP_SUPPLIERS_U1 | 0 | 1 | 0 |00:00:00.01
| 72 | VIEW PUSHED PREDICATE | | 0 | 1 | 0 |00:00:00.01
| 73 | NESTED LOOPS | | 0 | 1 | 0 |00:00:00.01
|* 74 | TABLE ACCESS BY INDEX ROWID | EE | 0 | 1 | 0 |00:00:00.01
|* 75 | INDEX UNIQUE SCAN | EE_U1 | 0 | 1 | 0 |00:00:00.01
|* 76 | TABLE ACCESS BY INDEX ROWID | PER_ALL_PEOPLE_F | 0 | 1 | 0 |00:00:00.01
|* 77 | INDEX RANGE SCAN | FF_PK | 0 | 2 | 0 |00:00:00.01
| 78 | TABLE ACCESS BY INDEX ROWID | AP_BATCHES_ALL | 0 | 1 | 0 |00:00:00.01
|* 79 | INDEX UNIQUE SCAN | AP_BATCHES_U1 | 0 | 1 | 0 |00:00:00.01
| 80 | TABLE ACCESS BY INDEX ROWID | FND_LOOKUP_VALUES | 0 | 1 | 0 |00:00:00.01
|* 81 | INDEX RANGE SCAN | FND_LOOKUP_VALUES_U1 | 0 | 1 | 0 |00:00:00.01
|* 82 | COUNT STOPKEY | | 0 | | 0 |00:00:00.01
| 83 | NESTED LOOPS | | 0 | 2 | 0 |00:00:00.01
| 84 | NESTED LOOPS | | 0 | 2 | 0 |00:00:00.01
| 85 | PARTITION LIST ALL | | 0 | 2 | 0 |00:00:00.01
| 86 | TABLE ACCESS BY LOCAL INDEX ROWID | BB | 0 | 2 | 0 |00:00:00.01
|* 87 | INDEX RANGE SCAN | BB_U1 | 0 | 2 | 0 |00:00:00.01
|* 88 | INDEX UNIQUE SCAN | GL_CODE_COMBINATIONS_U1 | 0 | 1 | 0 |00:00:00.01
| 89 | TABLE ACCESS BY INDEX ROWID | GL_CODE_COMBINATIONS | 0 | 1 | 0 |00:00:00.01
| 90 | NESTED LOOPS OUTER | | 1 | 6 | 0 |00:00:00.03
| 91 | NESTED LOOPS | | 1 | 6 | 0 |00:00:00.03
| 92 | NESTED LOOPS ANTI | | 1 | 6 | 0 |00:00:00.03
| 93 | NESTED LOOPS | | 1 | 6 | 0 |00:00:00.03
| 94 | NESTED LOOPS | | 1 | 1922 | 275 |00:00:00.02
| 95 | NESTED LOOPS | | 1 | 1774 | 233 |00:00:00.01
|* 96 | TABLE ACCESS BY INDEX ROWID | DD | 1 | 1774 | 234 |00:00:00.01
|* 97 | INDEX SKIP SCAN | AP_INVOICES_N3 | 1 | 10291 | 1429 |00:00:00.01
|* 98 | TABLE ACCESS BY GLOBAL INDEX ROWID| XLA_TRANSACTION_ENTITIES | 234 | 1 | 233 |00:00:00.01
|* 99 | INDEX RANGE SCAN | XLA_TRANSACTION_ENTITIES_N2 | 234 | 1 | 233 |00:00:00.01
| 100 | PARTITION LIST ALL | | 233 | 1 | 275 |00:00:00.01
| 101 | TABLE ACCESS BY LOCAL INDEX ROWID | XLA_EVENTS | 4427 | 1 | 275 |00:00:00.01
|*102 | INDEX RANGE SCAN | XLA_EVENTS_U2 | 4427 | 1 | 275 |00:00:00.01
| 103 | PARTITION LIST ALL | | 275 | 1 | 0 |00:00:00.01
|*104 | TABLE ACCESS BY LOCAL INDEX ROWID | XLA_AE_HEADERS | 5225 | 1 | 0 |00:00:00.01
|*105 | INDEX RANGE SCAN | XLA_AE_HEADERS_N2 | 5225 | 1 | 0 |00:00:00.01
|*106 | INDEX RANGE SCAN | GG_U1 | 0 | 1 | 0 |00:00:00.01
| 107 | TABLE ACCESS BY INDEX ROWID | AP_SUPPLIERS | 0 | 1 | 0 |00:00:00.01
|*108 | INDEX UNIQUE SCAN | AP_SUPPLIERS_U1 | 0 | 1 | 0 |00:00:00.01
| 109 | VIEW PUSHED PREDICATE | | 0 | 1 | 0 |00:00:00.01
| 110 | NESTED LOOPS | | 0 | 1 | 0 |00:00:00.01
|*111 | TABLE ACCESS BY INDEX ROWID | EE | 0 | 1 | 0 |00:00:00.01
|*112 | INDEX UNIQUE SCAN | EE_U1 | 0 | 1 | 0 |00:00:00.01
|*113 | TABLE ACCESS BY INDEX ROWID | PER_ALL_PEOPLE_F | 0 | 1 | 0 |00:00:00.01
|*114 | INDEX RANGE SCAN | FF_PK | 0 | 2 | 0 |00:00:00.01
------------------------------------------------------------------------------------------------------------------------- Predicate Information (identified by operation id):
--------------------------------------------------- 5 - access("AB"."BATCH_ID"=:B1)
7 - access("B"."LOOKUP_TYPE"='INVOICE TYPE' AND "B"."LOOKUP_CODE"=:B1 AND "B"."LANGUAGE"=USERENV('LANG'))
filter(("B"."LOOKUP_CODE"=:B1 AND "B"."LANGUAGE"=USERENV('LANG')))
8 - filter(ROWNUM=1)
13 - access("XAL"."AE_HEADER_ID"=:B1)
14 - access("XAL"."CODE_COMBINATION_ID"="CODE_COMBINATION_ID")
22 - filter(("AI"."INVOICE_TYPE_LOOKUP_CODE"='EXPENSE REPORT' AND "AI"."INVOICE_CURRENCY_CODE"='CNY'))
23 - access("AI"."ORG_ID"=379)
filter("AI"."ORG_ID"=379)
24 - filter("XTE"."ENTITY_CODE"='AP_INVOICES')
25 - access("AI"."SET_OF_BOOKS_ID"="XTE"."LEDGER_ID" AND "AI"."INVOICE_ID"="XTE"."SOURCE_ID_INT_1")
28 - access("XTE"."ENTITY_ID"="XE"."ENTITY_ID")
30 - filter(("XAH"."PERIOD_NAME"='2022-11' AND "XAH"."ACCOUNTING_ENTRY_STATUS_CODE"='F'))
31 - access("XE"."EVENT_ID"="XAH"."EVENT_ID" AND "XAH"."LEDGER_ID"=2026)
32 - access("XET"."APPLICATION_ID"="XE"."APPLICATION_ID" AND "XET"."ENTITY_CODE" LIKE 'AP_INVOICES' AND "XET"."EVENT_CL
APPLICATIONS' AND "XET"."EVENT_TYPE_CODE"="XE"."EVENT_TYPE_CODE" AND "XET"."LANGUAGE"='ZHS')
filter(("XET"."EVENT_CLASS_CODE"='PREPAYMENT APPLICATIONS' AND "XET"."LANGUAGE"='ZHS' AND "XET"."ENTITY_CODE" LIKE
"XET"."EVENT_TYPE_CODE"="XE"."EVENT_TYPE_CODE"))
34 - access("AI"."VENDOR_ID"="PV"."VENDOR_ID")
37 - filter("F"."EMPLOYEE_ID" IS NOT NULL)
38 - access("F"."USER_ID"="AI"."CREATED_BY")
39 - filter((DECODE("HR_SECURITY"."VIEW_ALL"(),'Y','TRUE',"HR_SECURITY"."SHOW_PERSON"("PAP"."PERSON_ID","PAP"."CURRENT_
EMPLOYEE_FLAG","PAP"."CURRENT_NPW_FLAG","PAP"."EMPLOYEE_NUMBER","PAP"."APPLICANT_NUMBER","PAP"."NPW_NUMBER"
"PAP"."BUSINESS_GROUP_ID"=DECODE("HR_GENERAL"."GET_XBG_PROFILE"(),'Y',"PAP"."BUSINESS_GROUP_ID","HR_GENERAL
40 - access("F"."EMPLOYEE_ID"="PERSON_ID")
42 - access("AB"."BATCH_ID"=:B1)
44 - access("B"."LOOKUP_TYPE"='INVOICE TYPE' AND "B"."LOOKUP_CODE"=:B1 AND "B"."LANGUAGE"=USERENV('LANG'))
filter(("B"."LOOKUP_CODE"=:B1 AND "B"."LANGUAGE"=USERENV('LANG')))
45 - filter(ROWNUM=1)
50 - access("XAL"."AE_HEADER_ID"=:B1)
51 - access("XAL"."CODE_COMBINATION_ID"="CODE_COMBINATION_ID")
59 - filter(("AI"."INVOICE_TYPE_LOOKUP_CODE"='PREPAYMENT' AND "AI"."INVOICE_CURRENCY_CODE"='CNY'))
60 - access("AI"."ORG_ID"=379)
filter("AI"."ORG_ID"=379)
61 - filter("XTE"."ENTITY_CODE"='AP_INVOICES')
62 - access("AI"."SET_OF_BOOKS_ID"="XTE"."LEDGER_ID" AND "AI"."INVOICE_ID"="XTE"."SOURCE_ID_INT_1")
65 - access("XTE"."ENTITY_ID"="XE"."ENTITY_ID")
67 - filter(("XAH"."PERIOD_NAME"='2022-11' AND "XAH"."ACCOUNTING_ENTRY_STATUS_CODE"='F'))
68 - access("XE"."EVENT_ID"="XAH"."EVENT_ID" AND "XAH"."LEDGER_ID"=2026)
69 - access("XET"."APPLICATION_ID"="XE"."APPLICATION_ID" AND "XET"."ENTITY_CODE" LIKE 'AP_INVOICES' AND "XET"."EVENT_CL
APPLICATIONS' AND "XET"."EVENT_TYPE_CODE"="XE"."EVENT_TYPE_CODE" AND "XET"."LANGUAGE"='ZHS')
filter(("XET"."EVENT_CLASS_CODE"='PREPAYMENT APPLICATIONS' AND "XET"."LANGUAGE"='ZHS' AND "XET"."ENTITY_CODE" LIKE
"XET"."EVENT_TYPE_CODE"="XE"."EVENT_TYPE_CODE"))
71 - access("AI"."VENDOR_ID"="PV"."VENDOR_ID")
74 - filter("F"."EMPLOYEE_ID" IS NOT NULL)
75 - access("F"."USER_ID"="AI"."CREATED_BY")
76 - filter((DECODE("HR_SECURITY"."VIEW_ALL"(),'Y','TRUE',"HR_SECURITY"."SHOW_PERSON"("PAP"."PERSON_ID","PAP"."CURRENT_
EMPLOYEE_FLAG","PAP"."CURRENT_NPW_FLAG","PAP"."EMPLOYEE_NUMBER","PAP"."APPLICANT_NUMBER","PAP"."NPW_NUMBER"
"PAP"."BUSINESS_GROUP_ID"=DECODE("HR_GENERAL"."GET_XBG_PROFILE"(),'Y',"PAP"."BUSINESS_GROUP_ID","HR_GENERAL
77 - access("F"."EMPLOYEE_ID"="PERSON_ID")
79 - access("AB"."BATCH_ID"=:B1)
81 - access("B"."LOOKUP_TYPE"='INVOICE TYPE' AND "B"."LOOKUP_CODE"=:B1 AND "B"."LANGUAGE"=USERENV('LANG'))
filter(("B"."LOOKUP_CODE"=:B1 AND "B"."LANGUAGE"=USERENV('LANG')))
82 - filter(ROWNUM=1)
87 - access("XAL"."AE_HEADER_ID"=:B1)
88 - access("XAL"."CODE_COMBINATION_ID"="CODE_COMBINATION_ID")
96 - filter(("AI"."INVOICE_CURRENCY_CODE"='CNY' AND "AI"."INVOICE_TYPE_LOOKUP_CODE"<>'EXPENSE REPORT' AND
"AI"."INVOICE_TYPE_LOOKUP_CODE"<>'PREPAYMENT'))
97 - access("AI"."ORG_ID"=379)
filter("AI"."ORG_ID"=379)
98 - filter("XTE"."ENTITY_CODE"='AP_INVOICES')
99 - access("AI"."SET_OF_BOOKS_ID"="XTE"."LEDGER_ID" AND "AI"."INVOICE_ID"="XTE"."SOURCE_ID_INT_1")
102 - access("XTE"."ENTITY_ID"="XE"."ENTITY_ID")
104 - filter(("XAH"."PERIOD_NAME"='2022-11' AND "XAH"."ACCOUNTING_ENTRY_STATUS_CODE"='F'))
105 - access("XE"."EVENT_ID"="XAH"."EVENT_ID" AND "XAH"."LEDGER_ID"=2026)
106 - access("XET"."APPLICATION_ID"="XE"."APPLICATION_ID" AND "XET"."ENTITY_CODE" LIKE 'AP_INVOICES' AND "XET"."EVENT_CL
APPLICATIONS' AND "XET"."EVENT_TYPE_CODE"="XE"."EVENT_TYPE_CODE" AND "XET"."LANGUAGE"='ZHS')
filter(("XET"."EVENT_CLASS_CODE"='PREPAYMENT APPLICATIONS' AND "XET"."LANGUAGE"='ZHS' AND "XET"."ENTITY_CODE" LIKE
"XET"."EVENT_TYPE_CODE"="XE"."EVENT_TYPE_CODE"))
108 - access("AI"."VENDOR_ID"="PV"."VENDOR_ID")
111 - filter("F"."EMPLOYEE_ID" IS NOT NULL)
112 - access("F"."USER_ID"="AI"."CREATED_BY")
113 - filter((DECODE("HR_SECURITY"."VIEW_ALL"(),'Y','TRUE',"HR_SECURITY"."SHOW_PERSON"("PAP"."PERSON_ID","PAP"."CURRENT_
EMPLOYEE_FLAG","PAP"."CURRENT_NPW_FLAG","PAP"."EMPLOYEE_NUMBER","PAP"."APPLICANT_NUMBER","PAP"."NPW_NUMBER"
"PAP"."BUSINESS_GROUP_ID"=DECODE("HR_GENERAL"."GET_XBG_PROFILE"(),'Y',"PAP"."BUSINESS_GROUP_ID","HR_GENERAL
114 - access("F"."EMPLOYEE_ID"="PERSON_ID")

可以通过A-Time看到17s结果已经出来了。

为什么原来的SQL需要跑8小时才能出结果,而加一条 HINT /*+MERGE(T)*/  17s 就能跑出来,因为这条 HINT 让 from 后面的(内联视图/视图)合并了,CBO 会尝试将内联视图/视图拆开,进行等价的改写,这个过程就叫作视图合并。

更详细的内容可以百度:ORACLE 视图合并,这里就不过多赘述。

想交流 SQL调优、PLSQL、SQL等价改写、JAVA 的朋友可以联系我 18902234014(微信同号),相互学习,共同进步。

ORACLE 视图合并SQL优化案例的更多相关文章

  1. oracle中的SQL优化

    一.SQL语言的使用1.IN 操作符    用IN写出来的SQL的优点是比较容易写及清晰易懂,这比较适合现代软件开发的风格.    但是用IN的SQL性能总是比较低的,从ORACLE执行的步骤来分析用 ...

  2. PostgreSQL 涉及复杂视图查询的优化案例

    一.前言 对于含有union , group by 等的视图,我们称之为复杂视图. 这类的视图会影响优化器对于视图的提升,也就是视图无法与父查询进行合并,从而影响访问路径.连接方法.连接顺序等.本文通 ...

  3. SQL优化案例—— RowNumber分页

    将业务语句翻译成SQL语句不仅是一门技术,还是一门艺术. 下面拿我们程序开发工程师最常用的ROW_NUMBER()分页作为一个典型案例来说明. 先来看看我们最常见的分页的样子: WITH CTE AS ...

  4. mysql的sql优化案例

    前言 mysql的sql优化器比较弱,选择执行计划貌似很随机. 案例 一.表结构说明mysql> show create table table_order\G***************** ...

  5. SQL 优化案例 1

    create or replace procedure SP_GET_NEWEST_CAPTCHA( v_ACCOUNT_ID in VARCHAR2, --接收短信的手机号 v_Tail_num i ...

  6. SQL 优化案例

    create or replace procedure SP_GET_NEWEST_CAPTCHA( v_ACCOUNT_ID in VARCHAR2, --接收短信的手机号 v_Tail_num i ...

  7. sqlserver sql优化案例及思路

    始sql: SELECT TOP 100 PERCENT ZZ.CREW_NAME AS 机组, ZZ.CREW_ID, AA.年度时间, CC.当月时间, DD.连续七天时间 AS 最近七天 FRO ...

  8. SQL夯实基础(四):子查询及sql优化案例

    首先我们先明确一下sql语句的执行顺序,如下有前至后执行: (1)from  (2) on   (3) join  (4) where  (5)group by  (6) avg,sum...  (7 ...

  9. oracle存储过程及sql优化-(一)

             本篇主要介绍存储过程的结构 先简单介绍下: oracle存储过程与函数不同,oracle函数和存储过程都可以有多个输入,但是函数一般只有一个输出,而oracle可以有多个输出且与输入 ...

  10. sql优化案例1

    --访客数 ) from ( select v.idvisitor from ods.piwik_log_visit v , , group by v.idvisitor) --优化后的访客数查询 s ...

随机推荐

  1. Libvirtd networks -- 为libvirtd 中虚拟机指定ip遇到的问题

    backgroup 为libvirtd 中虚拟机指定ip,操作如下: virsh --connect qemu:///system dumpxml vm01 | grep "mac addr ...

  2. 使用DBeaver连接数据库

    下载网站:官网下载 参考链接:使用 DBeaver 连接 OceanBase

  3. 【Qt6】QWidgetAction 的使用

    在开始主题前,先看一个 C++ 例子: #include <iostream> struct Data { int a; int b; }; // 注意这里 struct Data *s; ...

  4. [mysql]状态检查常用SQL

    前言 使用MySQL自身命令获取数据库服务状态. 连接数 -- 最大使用连接数 show status like 'Max_used_connections'; -- 系统配置的最大连接数 show ...

  5. quarkus依赖注入之九:bean读写锁

    欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 本篇是<quarkus依赖注入> ...

  6. 关于Openssh版本升级问题及版本升级到最新版8.7p1流程(CentOS7系统)

    前言: 对linux服务器做过漏洞扫描的都知道,常常服务器会被扫出一大堆关于openssh的漏洞,诸如下面这些,而其中的原因就是因为openssh版本比较低.于是就需要升级openssh的版本.下面就 ...

  7. python实现在函数中捕获某个异常,然后将异常的具体信息写入error.txt文件中;

    在程序开发中,如果对某些代码的执行不能确定(程序语法完全正确) 可以增加try来捕获异常 try这个关键字来捕获异常try:尝试执行的代码except:出现错误的处理 def func(): try: ...

  8. C++欧几里得算法求最大公约数和最小公倍数

    定义 最大公约数即为 Greatest Common Divisor,常缩写为 gcd. 一组整数的公约数,是指同时是这组数中每一个数的约数的数. 一组整数的最大公约数,是指所有公约数里面最大的一个. ...

  9. OpenSSH版本升级漏洞修复问题

    Hi, I'm @Merbelue 大家好,这篇为大家介绍二进制方式对OpenSSH版本升级,在生产环境中可用于解决版本升级.漏洞修复等. @ 目录 1.环境 2.安装telnet 2.1.检查是否安 ...

  10. Codeforces 1257D - Yet Another Monster Killing Problem

    题意: 有\(n\)个怪物,每个怪物有攻击力\(a_i\)点:有\(m\)个英雄,每个英雄有攻击力\(p_i\)点,耐力\(s_{i}\)点. 怪物需要被依次杀死(按输入顺序). 每一天可以挑选一个英 ...