SQL Tuning-With as

报表库在上线完后的第二天,两个节点CPU持续95%,经查看又是latch:cache buffers chain.
看看ASH信息:

INST_ID	PROGRAM	        SQL_ID	      EVENT	                      COUNT(*)	PERCENT
2	     JDBC Thin Client	cukkhnzrh2y28	latch: cache buffers chains	  66959	  19%
2	     JDBC Thin Client	gg7hj1tgv56ur	latch: cache buffers chains	  47383	  13%
1	     JDBC Thin Client	7nuzsbsjzzv81	latch: cache buffers chains	  34413	  10%
1	     JDBC Thin Client	f557q4b4y9vr7	latch: cache buffers chains	  37986	  10%
1	     JDBC Thin Client	djk4dr940v1y4	latch: cache buffers chains	  33866	  9%
2	     JDBC Thin Client	6pc72a9dg2gp6	latch: cache buffers chains	  31801	  9%
1	     JDBC Thin Client	8zdz3kr2pts6c	latch: cache buffers chains	  27348	  8%
2	     JDBC Thin Client	7zfqtg5zju251	latch: cache buffers chains	  23753	  7%
2	     JDBC Thin Client	43urhu1n8rf3p	latch: cache buffers chains	  12605	  3%
2	     JDBC Thin Client	afmyfqmqx1bxx	latch: cache buffers chains	  9900	  3%
2	     JDBC Thin Client	5aq4fsqnb85mq	latch: cache buffers chains	  11478	  3%
2	     JDBC Thin Client	44a7wsxkpzh5p	latch: cache buffers chains	  5637	  2%
1	     JDBC Thin Client	8swu3mguwaahv	latch: cache buffers chains	  2238	  1%
2	     JDBC Thin Client	fx985p8s4tk7v	latch: cache buffers chains	  4806	  1%
2	     JDBC Thin Client	4s8wdxq63jwz0	latch: cache buffers chains	  1836	  1%
2	     JDBC Thin Client	92bkxcjc36k11	latch: cache buffers chains	  2577	  1%

查看第一个SQL:cukkhnzrh2y28                                                                
SELECT :"SYS_B_00" type,
       :"SYS_B_01" pay_qty,
       :"SYS_B_02" price,
       SUM(T1.SHOULD_MONEY_C) / :"SYS_B_03" pay_fee,
       :"SYS_B_04" drt_qty,
       -SUM(T1.DERATE_MONEY_C) / :"SYS_B_05" drt_fee,
       :"SYS_B_06" total_get_qty,
       SUM(T1.FACT_MONEY_C) / :"SYS_B_07" get_fee
  FROM (
        SELECT T.CUSTOMER_ORDER_ID,
               MAX(DECODE(BUSI_FEE_ID,:"SYS_B_08",FACT_MONEY2)) FACT_MONEY_C,
               MAX(DECODE(BUSI_FEE_ID,:"SYS_B_09",SHOULD_MONEY2)) SHOULD_MONEY_C,
               MAX(DECODE(BUSI_FEE_ID,:"SYS_B_10",DERATE_MONEY2)) DERATE_MONEY_C
          FROM (
                SELECT A.*,
                       B.BUSI_FEE_ID,
                       B.FACT_MONEY FACT_MONEY2,
                       B.SHOULD_MONEY SHOULD_MONEY2,
                       B.DERATE_MONEY DERATE_MONEY2
                  FROM RP_PBOSS_DETAIL_577 A,
                       RP_FEE_DETAIL_577 B,
                       (SELECT CUSTOMER_ORDER_ID,MAX(AA.RECEIVE_TYPE) RECEIVE_TYPE FROM RP_PBOSS_DETAIL_577 AA GROUP BY CUSTOMER_ORDER_ID) C
                 WHERE A.OFFER_ORDER_ID = B.OFFER_ORDER_ID(+)
                   AND A.DONE_DATE = B.DONE_DATE(+)
                   AND A.CUSTOMER_ORDER_ID = C.CUSTOMER_ORDER_ID
                   AND A.DONE_DATE between to_date(:"SYS_B_11", :"SYS_B_12") and to_date(:"SYS_B_13", :"SYS_B_14") + :"SYS_B_15"
                   AND A.OP_ID IN (:"SYS_B_16")
                   AND C.RECEIVE_TYPE = :"SYS_B_17"
                UNION ALL
                SELECT A.*,
                       B.BUSI_FEE_ID,
                       B.FACT_MONEY FACT_MONEY2,
                       B.SHOULD_MONEY SHOULD_MONEY2,
                       B.DERATE_MONEY DERATE_MONEY2
                  FROM RP_PBOSS_DETAIL_577 A,
                       RP_FEE_DETAIL_577 B,
                       (SELECT CUSTOMER_ORDER_ID,MAX(AA.RECEIVE_TYPE) RECEIVE_TYPE FROM RP_PBOSS_DETAIL_577 AA GROUP BY CUSTOMER_ORDER_ID) C
                 WHERE A.OFFER_ORDER_ID = B.OFFER_ORDER_ID(+)
                   AND A.DONE_DATE = B.DONE_DATE(+)
                   AND A.CUSTOMER_ORDER_ID = C.CUSTOMER_ORDER_ID
                   AND A.COMPLETE_DATE between to_date(:"SYS_B_18", :"SYS_B_19") and to_date(:"SYS_B_20", :"SYS_B_21") + :"SYS_B_22"
                   AND A.OP_ID IN (:"SYS_B_23")
                   AND C.RECEIVE_TYPE = :"SYS_B_24"
                   AND A.ORDER_STATE = :"SYS_B_25"
                UNION ALL
                SELECT A.*,
                       B.BUSI_FEE_ID,
                       (:"SYS_B_26" - B.FACT_MONEY) FACT_MONEY2,
                       (:"SYS_B_27" - B.SHOULD_MONEY) SHOULD_MONEY2,
                       (:"SYS_B_28" - B.DERATE_MONEY) DERATE_MONEY2
                  FROM RP_PBOSS_DETAIL_577 A,
                       RP_FEE_DETAIL_577 B,
                       RP_CANCEL_DETAIL_577 C,
                       (SELECT CUSTOMER_ORDER_ID,MAX(AA.RECEIVE_TYPE) RECEIVE_TYPE FROM RP_PBOSS_DETAIL_577 AA GROUP BY CUSTOMER_ORDER_ID) D
                 WHERE A.OFFER_ORDER_ID = B.OFFER_ORDER_ID(+)
                   AND A.DONE_DATE = B.DONE_DATE(+)
                   AND A.CUSTOMER_ORDER_ID = C.CUSTOMER_ORDER_ID
                   AND A.CUSTOMER_ORDER_ID = D.CUSTOMER_ORDER_ID
                   AND C.CANCEL_DATE between to_date(:"SYS_B_29", :"SYS_B_30") and to_date(:"SYS_B_31", :"SYS_B_32") + :"SYS_B_33"
                   AND C.OP_ID IN (:"SYS_B_34")
                   AND D.RECEIVE_TYPE = :"SYS_B_35"
                   AND A.ORDER_STATE = :"SYS_B_36"
                   ) T
         WHERE T.PROD_CATALOG_ID = :"SYS_B_37"
           AND T.ORG_ID in (:"SYS_B_38")
           AND NOT (T.BUSINESS_ID = ANY(:"SYS_B_39", :"SYS_B_40") AND T.OFFER_TYPE = :"SYS_B_41" AND T.EXPIRE_DATE < TO_DATE(:"SYS_B_42", :"SYS_B_43"))
           AND T.BUSINESS_ID NOT IN (:"SYS_B_44", :"SYS_B_45", :"SYS_B_46",:"SYS_B_47", :"SYS_B_48")
         GROUP BY T.CUSTOMER_ORDER_ID) T1

Plan hash value: 1930065266

---------------------------------------------------------------------------------------------------------------------
| Id  | Operation                                    | Name                   | Rows| Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                             |                        |     |       | 19151 (100)|          |
|   1 |  SORT AGGREGATE                              |                        |   1 |    39 |            |          |
|   2 |   VIEW                                       |                        |   3 |   117 | 19151   (2)| 00:03:50 |
|   3 |    SORT GROUP BY                             |                        |   3 |   195 | 19151   (2)| 00:03:50 |
|   4 |     VIEW                                     |                        |   3 |   195 | 19150   (2)| 00:03:50 |
|   5 |      UNION-ALL                               |                        |     |       |            |          |
|   6 |       FILTER                                 |                        |     |       |            |          |
|   7 |        SORT GROUP BY                         |                        |   1 |   512 |  5724   (2)| 00:01:09 |
|   8 |         FILTER                               |                        |     |       |            |          |
|   9 |          HASH JOIN                           |                        |   1 |   512 |  5723   (2)| 00:01:09 |
|  10 |           NESTED LOOPS OUTER                 |                        |   1 |   501 |    16  (13)| 00:00:01 |
|  11 |            TABLE ACCESS BY INDEX ROWID       | RP_PBOSS_DETAIL_579    |   1 |   455 |    14   (8)| 00:00:01 |
|  12 |             BITMAP CONVERSION TO ROWIDS      |                        |     |       |            |          |
|  13 |              BITMAP AND                      |                        |     |       |            |          |
|  14 |               BITMAP CONVERSION FROM ROWIDS  |                        |     |       |            |          |
|  15 |                SORT ORDER BY                 |                        |     |       |            |          |
|  16 |                 INDEX RANGE SCAN             | IDX_RPPD_008_579       |1291 |       |     2   (0)| 00:00:01 |
|  17 |               BITMAP CONVERSION FROM ROWIDS  |                        |     |       |            |          |
|  18 |                INDEX RANGE SCAN              | IDX_RPPD_003_579       |1291 |       |     6   (0)| 00:00:01 |
|  19 |            PARTITION RANGE ITERATOR          |                        |   1 |    46 |     1   (0)| 00:00:01 |
|  20 |             TABLE ACCESS BY LOCAL INDEX ROWID| RP_FEE_DETAIL_579      |   1 |    46 |     1   (0)| 00:00:01 |
|  21 |              INDEX RANGE SCAN                | IDX_RP_FEE_INT_008_579 |   1 |       |     1   (0)| 00:00:01 |
|  22 |           TABLE ACCESS FULL                  | RP_PBOSS_DETAIL_579    | 479K|  5149K|  5703   (2)| 00:01:09 |
|  23 |       FILTER                                 |                        |     |       |            |          |
|  24 |        SORT GROUP BY                         |                        |   1 |   512 |  6647   (2)| 00:01:20 |
|  25 |         FILTER                               |                        |     |       |            |          |
|  26 |          NESTED LOOPS OUTER                  |                        |   1 |   512 |  6646   (2)| 00:01:20 |
|  27 |           HASH JOIN                          |                        |   1 |   466 |  6645   (2)| 00:01:20 |
|  28 |            TABLE ACCESS BY INDEX ROWID       | RP_PBOSS_DETAIL_579    |   1 |   455 |   937   (1)| 00:00:12 |
|  29 |             INDEX RANGE SCAN                 | IDX_RPPD_003_579       |4205 |       |     6   (0)| 00:00:01 |
|  30 |            TABLE ACCESS FULL                 | RP_PBOSS_DETAIL_579    | 479K|  5149K|  5703   (2)| 00:01:09 |
|  31 |           PARTITION RANGE ITERATOR           |                        |   1 |    46 |     2   (0)| 00:00:01 |
|  32 |            TABLE ACCESS BY LOCAL INDEX ROWID | RP_FEE_DETAIL_579      |   1 |    46 |     2   (0)| 00:00:01 |
|  33 |             INDEX RANGE SCAN                 | IDX_RP_FEE_INT_008_579 |   3 |       |     1   (0)| 00:00:01 |
|  34 |       FILTER                                 |                        |     |       |            |          |
|  35 |        SORT GROUP BY                         |                        |   1 |   543 |  6778   (2)| 00:01:22 |
|  36 |         FILTER                               |                        |     |       |            |          |
|  37 |          NESTED LOOPS OUTER                  |                        |   1 |   543 |  6777   (2)| 00:01:22 |
|  38 |           NESTED LOOPS                       |                        |   1 |   497 |  6776   (2)| 00:01:22 |
|  39 |            MERGE JOIN CARTESIAN              |                        |   1 |    42 |  5839   (2)| 00:01:11 |
|  40 |             TABLE ACCESS FULL                | RP_CANCEL_DETAIL_579   |   1 |    31 |   137   (3)| 00:00:02 |
|  41 |             BUFFER SORT                      |                        | 479K|  5149K|  5703   (2)| 00:01:09 |
|  42 |              TABLE ACCESS FULL               | RP_PBOSS_DETAIL_579    | 479K|  5149K|  5703   (2)| 00:01:09 |
|  43 |            TABLE ACCESS BY INDEX ROWID       | RP_PBOSS_DETAIL_579    |   1 |   455 |   937   (1)| 00:00:12 |
|  44 |             INDEX RANGE SCAN                 | IDX_RPPD_003_579       |4205 |       |     5   (0)| 00:00:01 |
|  45 |           PARTITION RANGE ITERATOR           |                        |   1 |    46 |     2   (0)| 00:00:01 |
|  46 |            TABLE ACCESS BY LOCAL INDEX ROWID | RP_FEE_DETAIL_579      |   1 |    46 |     2   (0)| 00:00:01 |
|  47 |             INDEX RANGE SCAN                 | IDX_RP_FEE_INT_008_579 |   3 |       |     1   (0)| 00:00:01 |
---------------------------------------------------------------------------------------------------------------------

瞟一眼执行计划:瓶颈很明显,看看22,30,40.其实也看到,cache buffers chain latch保护的相应chain bucket中的对象为RP_PBOSS_DETAIL_579。所以,还是sql
的执行计划有问题,导致的大量热块度,latch争用,CPU持续超过95%。
更改sql如下

with CC as
(SELECT/*+ materialize */CUSTOMER_ORDER_ID,MAX(AA.RECEIVE_TYPE) RECEIVE_TYPE FROM RPT.RP_PBOSS_DETAIL_579 AA GROUP BY CUSTOMER_ORDER_ID)
SELECT :"SYS_B_00" type,
       :"SYS_B_01" pay_qty,
       :"SYS_B_02" price,
       SUM(T1.SHOULD_MONEY_C) / :"SYS_B_03" pay_fee,
       :"SYS_B_04" drt_qty,
       -SUM(T1.DERATE_MONEY_C) / :"SYS_B_05" drt_fee,
       :"SYS_B_06" total_get_qty,
       SUM(T1.FACT_MONEY_C) / :"SYS_B_07" get_fee
  FROM (
        SELECT T.CUSTOMER_ORDER_ID,
               MAX(DECODE(BUSI_FEE_ID,:"SYS_B_08",FACT_MONEY2)) FACT_MONEY_C,
               MAX(DECODE(BUSI_FEE_ID,:"SYS_B_09",SHOULD_MONEY2)) SHOULD_MONEY_C,
               MAX(DECODE(BUSI_FEE_ID,:"SYS_B_10",DERATE_MONEY2)) DERATE_MONEY_C
          FROM (
                SELECT A.*,
                       B.BUSI_FEE_ID,
                       B.FACT_MONEY FACT_MONEY2,
                       B.SHOULD_MONEY SHOULD_MONEY2,
                       B.DERATE_MONEY DERATE_MONEY2
                  FROM RPT.RP_PBOSS_DETAIL_579 A,
                       RPT.RP_FEE_DETAIL_579 B,
                       CC
                 WHERE A.OFFER_ORDER_ID = B.OFFER_ORDER_ID(+)
                   AND A.DONE_DATE = B.DONE_DATE(+)
                   AND A.CUSTOMER_ORDER_ID = CC.CUSTOMER_ORDER_ID
                   AND A.DONE_DATE between to_date(:"SYS_B_11", :"SYS_B_12") and to_date(:"SYS_B_13", :"SYS_B_14") + :"SYS_B_15"
                   AND A.OP_ID IN (:"SYS_B_16")
                   AND CC.RECEIVE_TYPE = :"SYS_B_17"
                UNION ALL
                SELECT A.*,
                       B.BUSI_FEE_ID,
                       B.FACT_MONEY FACT_MONEY2,
                       B.SHOULD_MONEY SHOULD_MONEY2,
                       B.DERATE_MONEY DERATE_MONEY2
                  FROM RPT.RP_PBOSS_DETAIL_579 A,
                       RPT.RP_FEE_DETAIL_579 B,
                       CC
                 WHERE A.OFFER_ORDER_ID = B.OFFER_ORDER_ID(+)
                   AND A.DONE_DATE = B.DONE_DATE(+)
                   AND A.CUSTOMER_ORDER_ID = CC.CUSTOMER_ORDER_ID
                   AND A.COMPLETE_DATE between to_date(:"SYS_B_18", :"SYS_B_19") and to_date(:"SYS_B_20", :"SYS_B_21") + :"SYS_B_22"
                   AND A.OP_ID IN (:"SYS_B_23")
                   AND CC.RECEIVE_TYPE = :"SYS_B_24"
                   AND A.ORDER_STATE = :"SYS_B_25"
                UNION ALL
                SELECT A.*,
                       B.BUSI_FEE_ID,
                       (:"SYS_B_26" - B.FACT_MONEY) FACT_MONEY2,
                       (:"SYS_B_27" - B.SHOULD_MONEY) SHOULD_MONEY2,
                       (:"SYS_B_28" - B.DERATE_MONEY) DERATE_MONEY2
                  FROM RPT.RP_PBOSS_DETAIL_579 A,
                       RPT.RP_FEE_DETAIL_579 B,
                       RPT.RP_CANCEL_DETAIL_579 C,
                       CC
                 WHERE A.OFFER_ORDER_ID = B.OFFER_ORDER_ID(+)
                   AND A.DONE_DATE = B.DONE_DATE(+)
                   AND A.CUSTOMER_ORDER_ID = C.CUSTOMER_ORDER_ID
                   AND A.CUSTOMER_ORDER_ID = CC.CUSTOMER_ORDER_ID
                   AND C.CANCEL_DATE between to_date(:"SYS_B_29", :"SYS_B_30") and to_date(:"SYS_B_31", :"SYS_B_32") + :"SYS_B_33"
                   AND C.OP_ID IN (:"SYS_B_34")
                   AND CC.RECEIVE_TYPE = :"SYS_B_35"
                   AND A.ORDER_STATE = :"SYS_B_36"
                   ) T
         WHERE T.PROD_CATALOG_ID = :"SYS_B_37"
           AND T.ORG_ID in (:"SYS_B_38")
           AND NOT (T.BUSINESS_ID = ANY(:"SYS_B_39", :"SYS_B_40") AND T.OFFER_TYPE = :"SYS_B_41" AND T.EXPIRE_DATE < TO_DATE(:"SYS_B_42", :"SYS_B_43"))
           AND T.BUSINESS_ID NOT IN (:"SYS_B_44", :"SYS_B_45", :"SYS_B_46",:"SYS_B_47", :"SYS_B_48")
         GROUP BY T.CUSTOMER_ORDER_ID) T1;

Plan hash value: 1402984985

-----------------------------------------------------------------------------------------------------------
| Id  | Operation                                   | Name                        |Rows| Bytes |Cost(%CPU)|
-----------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                            |                             |  1 |    39 |7243   (3)|
|   1 |  TEMP TABLE TRANSFORMATION                  |                             |    |       |          |
|   2 |   LOAD AS SELECT                            |                             |    |       |          |
|   3 |    SORT GROUP BY                            |                             |201K|  2161K|7044   (2)|
|   4 |     TABLE ACCESS FULL                       | RP_PBOSS_DETAIL_579         |478K|  5144K|5702   (2)|
|   5 |   SORT AGGREGATE                            |                             |  1 |    39 |          |
|   6 |    VIEW                                     |                             |  3 |   117 | 199  (10)|
|   7 |     SORT GROUP BY                           |                             |  3 |   420 | 199  (10)|
|   8 |      VIEW                                   |                             |  3 |   420 | 198  (10)|
|   9 |       UNION-ALL                             |                             |    |       |          |
|* 10 |        FILTER                               |                             |    |       |          |
|* 11 |         HASH JOIN                           |                             |  1 |   127 |  63  (10)|
|  12 |          NESTED LOOPS OUTER                 |                             |  1 |   112 |   3   (0)|
|* 13 |           TABLE ACCESS BY INDEX ROWID       | RP_PBOSS_DETAIL_579         |  1 |    78 |   2   (0)|
|* 14 |            INDEX RANGE SCAN                 | IDX_RPPD_009_579            |  3 |       |   1   (0)|
|  15 |           PARTITION RANGE ITERATOR          |                             |  1 |    34 |   1   (0)|
|* 16 |            TABLE ACCESS BY LOCAL INDEX ROWID| RP_FEE_DETAIL_579           |  1 |    34 |   1   (0)|
|* 17 |             INDEX RANGE SCAN                | IDX_RP_FEE_INT_008_579      |  1 |       |   1   (0)|
|* 18 |          VIEW                               |                             |201K|  2947K|  58   (7)|
|  19 |           TABLE ACCESS FULL                 | SYS_TEMP_0FD9FC85A_54FF2F02 |201K|  2161K|  58   (7)|
|* 20 |        FILTER                               |                             |    |       |          |
|  21 |         NESTED LOOPS OUTER                  |                             |  1 |   136 |  71   (9)|
|* 22 |          HASH JOIN                          |                             |  1 |   102 |  70   (9)|
|* 23 |           TABLE ACCESS BY INDEX ROWID       | RP_PBOSS_DETAIL_579         |  1 |    87 |  10   (0)|
|  24 |            BITMAP CONVERSION TO ROWIDS      |                             |    |       |          |
|  25 |             BITMAP AND                      |                             |    |       |          |
|  26 |              BITMAP CONVERSION FROM ROWIDS  |                             |    |       |          |
|* 27 |               INDEX RANGE SCAN              | IDX_RPPD_004_579            |624 |       |   2   (0)|
|  28 |              BITMAP CONVERSION FROM ROWIDS  |                             |    |       |          |
|* 29 |               INDEX RANGE SCAN              | IDX_RPPD_003_579            |624 |       |   6   (0)|
|* 30 |           VIEW                              |                             |201K|  2947K|  58   (7)|
|  31 |            TABLE ACCESS FULL                | SYS_TEMP_0FD9FC85A_54FF2F02 |201K|  2161K|  58   (7)|
|  32 |          PARTITION RANGE ITERATOR           |                             |  1 |    34 |   1   (0)|
|* 33 |           TABLE ACCESS BY LOCAL INDEX ROWID | RP_FEE_DETAIL_579           |  1 |    34 |   1   (0)|
|* 34 |            INDEX RANGE SCAN                 | IDX_RP_FEE_INT_008_579      |  3 |       |   1   (0)|
|* 35 |        FILTER                               |                             |    |       |          |
|  36 |         NESTED LOOPS OUTER                  |                             |  1 |   147 |  64  (10)|
|* 37 |          HASH JOIN                          |                             |  1 |   113 |  63  (10)|
|* 38 |           TABLE ACCESS BY INDEX ROWID       | RP_PBOSS_DETAIL_579         |  1 |    72 |   2   (0)|
|  39 |            NESTED LOOPS                     |                             |  1 |    98 |   3   (0)|
|  40 |             TABLE ACCESS BY INDEX ROWID     | RP_CANCEL_DETAIL_579        |  1 |    26 |   1   (0)|
|* 41 |              INDEX RANGE SCAN               | IDX_RPCD_009_579            |  1 |       |   1   (0)|
|* 42 |             INDEX RANGE SCAN                | IDX_RPPD_010_579            |  2 |       |   1   (0)|
|* 43 |           VIEW                              |                             |201K|  2947K|  58   (7)|
|  44 |            TABLE ACCESS FULL                | SYS_TEMP_0FD9FC85A_54FF2F02 |201K|  2161K|  58   (7)|
|  45 |          PARTITION RANGE ITERATOR           |                             |  1 |    34 |   1   (0)|
|* 46 |           TABLE ACCESS BY LOCAL INDEX ROWID | RP_FEE_DETAIL_579           |  1 |    34 |   1   (0)|
|* 47 |            INDEX RANGE SCAN                 | IDX_RP_FEE_INT_008_579      |  3 |       |   1   (0)|
-----------------------------------------------------------------------------------------------------------

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

  10 - filter(TO_DATE(:SYS_B_11,:SYS_B_12)<=TO_DATE(:SYS_B_13,:SYS_B_14)+TO_NUMBER(:SYS_B_15))
  11 - access("A"."CUSTOMER_ORDER_ID"="CC"."CUSTOMER_ORDER_ID")
  13 - filter("A"."ORG_ID"=TO_NUMBER(:SYS_B_38) AND "A"."PROD_CATALOG_ID"=TO_NUMBER(:SYS_B_37) 
              AND "A"."BUSINESS_ID"<>TO_NUMBER(:SYS_B_44)
              AND "A"."BUSINESS_ID"<>TO_NUMBER(:SYS_B_45) AND "A"."BUSINESS_ID"<>TO_NUMBER(:SYS_B_46) 
              AND "A"."BUSINESS_ID"<>TO_NUMBER(:SYS_B_47) AND
              "A"."BUSINESS_ID"<>TO_NUMBER(:SYS_B_48) AND ("A"."OFFER_TYPE"<>:SYS_B_41 
              OR "A"."BUSINESS_ID"<>TO_NUMBER(:SYS_B_39) AND
              "A"."BUSINESS_ID"<>TO_NUMBER(:SYS_B_40) OR "A"."EXPIRE_DATE">=TO_DATE(:SYS_B_42,:SYS_B_43)))
  14 - access("A"."OP_ID"=:SYS_B_16 AND "A"."DONE_DATE">=TO_DATE(:SYS_B_11,:SYS_B_12) AND
              "A"."DONE_DATE"<=TO_DATE(:SYS_B_13,:SYS_B_14)+TO_NUMBER(:SYS_B_15))
  16 - filter("A"."OFFER_ORDER_ID"="B"."OFFER_ORDER_ID"(+))
  17 - access("A"."DONE_DATE"="B"."DONE_DATE"(+))
       filter("B"."DONE_DATE"(+)>=TO_DATE(:SYS_B_11,:SYS_B_12) 
              AND "B"."DONE_DATE"(+)<=TO_DATE(:SYS_B_13,:SYS_B_14)+TO_NUMBER(:SYS_B_15))
  18 - filter("CC"."RECEIVE_TYPE"=:SYS_B_17)
  20 - filter(TO_DATE(:SYS_B_18,:SYS_B_19)<=TO_DATE(:SYS_B_20,:SYS_B_21)+TO_NUMBER(:SYS_B_22))
  22 - access("A"."CUSTOMER_ORDER_ID"="CC"."CUSTOMER_ORDER_ID")
  23 - filter("A"."ORDER_STATE"=:SYS_B_25 AND "A"."PROD_CATALOG_ID"=TO_NUMBER(:SYS_B_37) AND
              "A"."COMPLETE_DATE">=TO_DATE(:SYS_B_18,:SYS_B_19) 
              AND "A"."COMPLETE_DATE"<=TO_DATE(:SYS_B_20,:SYS_B_21)+TO_NUMBER(:SYS_B_22) AND
              "A"."BUSINESS_ID"<>TO_NUMBER(:SYS_B_44) AND "A"."BUSINESS_ID"<>TO_NUMBER(:SYS_B_45) 
              AND "A"."BUSINESS_ID"<>TO_NUMBER(:SYS_B_46) AND
              "A"."BUSINESS_ID"<>TO_NUMBER(:SYS_B_47) AND "A"."BUSINESS_ID"<>TO_NUMBER(:SYS_B_48) 
              AND ("A"."OFFER_TYPE"<>:SYS_B_41 OR
              "A"."BUSINESS_ID"<>TO_NUMBER(:SYS_B_39) AND "A"."BUSINESS_ID"<>TO_NUMBER(:SYS_B_40) 
              OR "A"."EXPIRE_DATE">=TO_DATE(:SYS_B_42,:SYS_B_43)))
  27 - access("A"."OP_ID"=:SYS_B_23)
  29 - access("A"."ORG_ID"=TO_NUMBER(:SYS_B_38))
  30 - filter("CC"."RECEIVE_TYPE"=:SYS_B_24)
  33 - filter("A"."OFFER_ORDER_ID"="B"."OFFER_ORDER_ID"(+))
  34 - access("A"."DONE_DATE"="B"."DONE_DATE"(+))
  35 - filter(TO_DATE(:SYS_B_29,:SYS_B_30)<=TO_DATE(:SYS_B_31,:SYS_B_32)+TO_NUMBER(:SYS_B_33))
  37 - access("A"."CUSTOMER_ORDER_ID"="CC"."CUSTOMER_ORDER_ID")
  38 - filter("A"."ORDER_STATE"=:SYS_B_36 AND "A"."ORG_ID"=TO_NUMBER(:SYS_B_38) 
              AND "A"."PROD_CATALOG_ID"=TO_NUMBER(:SYS_B_37) AND
              "A"."BUSINESS_ID"<>TO_NUMBER(:SYS_B_44) AND "A"."BUSINESS_ID"<>TO_NUMBER(:SYS_B_45) 
              AND "A"."BUSINESS_ID"<>TO_NUMBER(:SYS_B_46) AND
              "A"."BUSINESS_ID"<>TO_NUMBER(:SYS_B_47) AND "A"."BUSINESS_ID"<>TO_NUMBER(:SYS_B_48) 
              AND ("A"."OFFER_TYPE"<>:SYS_B_41 OR
              "A"."BUSINESS_ID"<>TO_NUMBER(:SYS_B_39) AND "A"."BUSINESS_ID"<>TO_NUMBER(:SYS_B_40) 
              OR "A"."EXPIRE_DATE">=TO_DATE(:SYS_B_42,:SYS_B_43)))
  41 - access("C"."OP_ID"=:SYS_B_34 AND "C"."CANCEL_DATE">=TO_DATE(:SYS_B_29,:SYS_B_30) AND
              "C"."CANCEL_DATE"<=TO_DATE(:SYS_B_31,:SYS_B_32)+TO_NUMBER(:SYS_B_33))
  42 - access("A"."CUSTOMER_ORDER_ID"="C"."CUSTOMER_ORDER_ID")
  43 - filter("CC"."RECEIVE_TYPE"=:SYS_B_35)
  46 - filter("A"."OFFER_ORDER_ID"="B"."OFFER_ORDER_ID"(+))
  47 - access("A"."DONE_DATE"="B"."DONE_DATE"(+))

虽然效率不是好很多,单对于报表库来说,更改后此SQL效率已经提升2倍多。补充:下面的几个sql和第一个都是类似的,只是不同地市的不同表,sql完全一致,所以搞定一个,其它的就ok。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值