oracle запрос занимает больше времени выполнения в oracle при использовании условия AND - PullRequest
0 голосов
/ 19 февраля 2020

Этот запрос, приведенный ниже, требует больше времени выполнения при фильтрации с условием AND TD.A97 = '4408', и помимо них я объединяю две таблицы и два синонима, которые могут помочь мне сократить время выполнения этого запроса.

SELECT DISTINCT TC.CUS_ACNT_NBR ,
                TC.CUS_ACNT_ROLE_CD ,
                TD.F_DOCNUMBER,
                TD.A45,
                HD.SHPMNT_NBR, 
                HD.SHPMNT_ID 
FROM   TDOC_CUS_ACNT TC
       INNER JOIN TDOC TD ON TD.F_DOCNUMBER = TC.F_DOCNUMBER 
       INNER JOIN DWH_SHIPMENT_DIM HD ON TD.A45 = HD.SHPMNT_NBR
       INNER JOIN DWH_INVOICE_CHARGE_FACT ICF ON HD.shpmnt_dim_key = ICF.shipment_dim_fk
WHERE  TC.CUS_ACNT_ROLE_CD in ('BILL','SHPR','THRD') 
AND    TD.A97 = '4408' ;

Ответы [ 2 ]

0 голосов
/ 19 февраля 2020

план объяснения: ниже моего плана объяснения с условием AND.

PLAN_TABLE_OUTPUT

Plan hash value: 53520552

----------------------------------------------------------------------------------------------------------------------------------------------
| Id  | Operation                         | Name                | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     | TQ/Ins |IN-OUT| PQ Distrib |
----------------------------------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                  |                     |  1639K|   148M|       | 15382   (1)| 00:00:01 |        |      |            |
|   1 |  PX COORDINATOR                   |                     |       |       |       |            |          |        |      |            |
|   2 |   PX SEND QC (RANDOM)             | :TQ10007            |  1639K|   148M|       | 15382   (1)| 00:00:01 |  Q1,07 | P->S | QC (RAND)  |
|   3 |    HASH UNIQUE                    |                     |  1639K|   148M|   164M| 15382   (1)| 00:00:01 |  Q1,07 | PCWP |            |
|   4 |     PX RECEIVE                    |                     |  1639K|   148M|       | 15382   (1)| 00:00:01 |  Q1,07 | PCWP |            |
|   5 |      PX SEND HASH                 | :TQ10006            |  1639K|   148M|       | 15382   (1)| 00:00:01 |  Q1,06 | P->P | HASH       |
|   6 |       HASH UNIQUE                 |                     |  1639K|   148M|   164M| 15382   (1)| 00:00:01 |  Q1,06 | PCWP |            |
|*  7 |        HASH JOIN                  |                     |  1639K|   148M|       | 12902   (1)| 00:00:01 |  Q1,06 | PCWP |            |
|   8 |         PX RECEIVE                |                     |   434K|    33M|       |  8351   (1)| 00:00:01 |  Q1,06 | PCWP |            |
|   9 |          PX SEND HASH             | :TQ10005            |   434K|    33M|       |  8351   (1)| 00:00:01 |  Q1,05 | P->P | HASH       |
|* 10 |           HASH JOIN BUFFERED      |                     |   434K|    33M|       |  8351   (1)| 00:00:01 |  Q1,05 | PCWP |            |
|  11 |            BUFFER SORT            |                     |       |       |       |            |          |  Q1,05 | PCWC |            |
|  12 |             PX RECEIVE            |                     |   325K|  7636K|       |  2335   (1)| 00:00:01 |  Q1,05 | PCWP |            |
|  13 |              PX SEND HASH         | :TQ10001            |   325K|  7636K|       |  2335   (1)| 00:00:01 |        | S->P | HASH       |
|* 14 |               TABLE ACCESS FULL   | TDOC_CUS_ACNT       |   325K|  7636K|       |  2335   (1)| 00:00:01 |        |      |            |
|  15 |            PX RECEIVE             |                     |   272K|    15M|       |  6015   (1)| 00:00:01 |  Q1,05 | PCWP |            |
|  16 |             PX SEND HASH          | :TQ10004            |   272K|    15M|       |  6015   (1)| 00:00:01 |  Q1,04 | P->P | HASH       |
|* 17 |              HASH JOIN            |                     |   272K|    15M|       |  6015   (1)| 00:00:01 |  Q1,04 | PCWP |            |
|  18 |               PX RECEIVE          |                     |   268K|  5508K|       |   660   (1)| 00:00:01 |  Q1,04 | PCWP |            |
|  19 |                PX SEND HASH       | :TQ10003            |   268K|  5508K|       |   660   (1)| 00:00:01 |  Q1,03 | P->P | HASH       |
|  20 |                 PX BLOCK ITERATOR |                     |   268K|  5508K|       |   660   (1)| 00:00:01 |  Q1,03 | PCWC |            |
|* 21 |                  TABLE ACCESS FULL| TDOC                |   268K|  5508K|       |   660   (1)| 00:00:01 |  Q1,03 | PCWP |            |
|  22 |               BUFFER SORT         |                     |       |       |       |            |          |  Q1,04 | PCWC |            |
|  23 |                PX RECEIVE         |                     |  1769K|    62M|       |  5354   (1)| 00:00:01 |  Q1,04 | PCWP |            |
|  24 |                 PX SEND HASH      | :TQ10000            |  1769K|    62M|       |  5354   (1)| 00:00:01 |        | S->P | HASH       |
|  25 |                  REMOTE           | SHIPMENT_DIM        |  1769K|    62M|       |  5354   (1)| 00:00:01 |   TDIM | R->S |            |
|  26 |         BUFFER SORT               |                     |       |       |       |            |          |  Q1,06 | PCWC |            |
|  27 |          PX RECEIVE               |                     |  6677K|    82M|       |  4550   (1)| 00:00:01 |  Q1,06 | PCWP |            |
|  28 |           PX SEND HASH            | :TQ10002            |  6677K|    82M|       |  4550   (1)| 00:00:01 |        | S->P | HASH       |
|  29 |            REMOTE                 | INVOICE_CHARGE_FACT |  6677K|    82M|       |  4550   (1)| 00:00:01 |   TDIM | R->S |            |
----------------------------------------------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   7 - access("HD"."SHPMNT_DIM_KEY"="ICF"."SHIPMENT_DIM_FK")
  10 - access("TD"."F_DOCNUMBER"="TC"."F_DOCNUMBER")
  14 - filter("TC"."CUS_ACNT_ROLE_CD"='BILL' OR "TC"."CUS_ACNT_ROLE_CD"='SHPR' OR "TC"."CUS_ACNT_ROLE_CD"='THRD')
  17 - access("TD"."A45"="HD"."SHPMNT_NBR")
  21 - filter("TD"."A45" IS NOT NULL AND "TD"."A97"='4408')

Remote SQL Information (identified by operation id):
----------------------------------------------------

  25 - SELECT "SHPMNT_DIM_KEY","SHPMNT_NBR","SHPMNT_ID" FROM "DIM"."SHIPMENT_DIM" "HD" (accessing 'TDIM.WORLD' )

  29 - SELECT "SHIPMENT_DIM_FK" FROM "DIM"."INVOICE_CHARGE_FACT" "ICF" (accessing 'TDIM.WORLD' )


Note
-----
   - dynamic statistics used: dynamic sampling (level=5)
   - Degree of Parallelism is 16 because of table property
0 голосов
/ 19 февраля 2020

Один из способов сократить время выполнения - использовать параллельные подсказки в запросе.

 ALTER TABLE  T PARALLEL 4;

 SELECT  /*+ parallel(4) */    DISTINCT TC.CUS_ACNT_NBR ...

oracle документы

...