zoukankan      html  css  js  c++  java
  • 半链接改写成关联

    SQL> select sum(nvl(GetBusinessZongE('BusinessApprove', BA.SerialNo), 0)) as BusinessSum,
           sum(nvl(GetBusinessChangKou('BusinessApprove', BA.SerialNo), 0)) as ApproveSum
      from Business_Approve BA
     where 1 = 1
       and not exists (select 'x'
              from Business_Contract
             where RelativeSerialNo = BA.SerialNo)
       and BA.StatusFlag is null
       and exists
       (select 'x'
              from Customer_Info
             where (EMcCustomerID = '' or CustomerID = '20131119000089')
             and 
             (
                   (BA.CustomerID = CustomerID and BA.BusinessType <> '1020040') or
                   (BA.ThirdPartyID2 = CustomerID and BA.BusinessType = '1020040')
             )
       )
       and (BA.BusinessType like '1%' or BA.BusinessType like '2%')
       and BA.BusinessType not in
           ('1110008040', '1110008041', '1110008042', '4010', '4020');  2    3    4    5    6    7    8    9   10   11   12   13   14   15   16   17   18   19   20   21  
    
    BUSINESSSUM APPROVESUM
    ----------- ----------
    
    
    SQL> select * from table(dbms_xplan.display_cursor(null,null,'ALLSTATS LAST'));
    
    
    PLAN_TABLE_OUTPUT
    --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    SQL_ID	8kxqnmdm3qfk1, child number 0
    -------------------------------------
    select sum(nvl(GetBusinessZongE('BusinessApprove', BA.SerialNo), 0)) as
    BusinessSum,	    sum(nvl(GetBusinessChangKou('BusinessApprove',
    BA.SerialNo), 0)) as ApproveSum   from Business_Approve BA  where 1 = 1
       and not exists (select 'x'		from Business_Contract
    where RelativeSerialNo = BA.SerialNo)	 and BA.StatusFlag is null
    and exists    (select 'x'	    from Customer_Info		where
    (EMcCustomerID = '' or CustomerID = '20131119000089')	       and
        (		     (BA.CustomerID = CustomerID and BA.BusinessType <>
    '1020040') or		     (BA.ThirdPartyID2 = CustomerID and
    BA.BusinessType = '1020040')	      )    )	and (BA.BusinessType
    like '1%' or BA.BusinessType like '2%')    and BA.BusinessType not in
         ('1110008040', '1110008041', '1110008042', '4010', '4020')
    
    Plan hash value: 1312284355
    
    --------------------------------------------------------------------------------------------------------------------------------------------------------
    | Id  | Operation		| Name				 | Starts | E-Rows | A-Rows |	A-Time	 | Buffers | Reads  |  OMem |  1Mem | Used-Mem |
    --------------------------------------------------------------------------------------------------------------------------------------------------------
    |   0 | SELECT STATEMENT	|				 |	1 |	   |	  1 |00:00:01.72 |   23998 |  23097 |	    |	    |	       |
    |   1 |  SORT AGGREGATE 	|				 |	1 |	 1 |	  1 |00:00:01.72 |   23998 |  23097 |	    |	    |	       |
    |*  2 |   FILTER		|				 |	1 |	   |	  0 |00:00:01.72 |   23998 |  23097 |	    |	    |	       |
    |*  3 |    HASH JOIN RIGHT ANTI |				 |	1 |   1457 |	139 |00:00:01.72 |   23849 |  23097 |	 11M|  4048K|	13M (0)|
    |*  4 |     INDEX FAST FULL SCAN| PK_BC_RELATIVESERIALNO	 |	1 |    202K|	202K|00:00:00.06 |     744 |	  0 |	    |	    |	       |
    |*  5 |     TABLE ACCESS FULL	| BUSINESS_APPROVE		 |	1 |    145K|	160K|00:00:01.29 |   23105 |  23097 |	    |	    |	       |
    |*  6 |    INDEX UNIQUE SCAN	| BIN$oTAOXbMjMHLgQwoCgBIwcg==$0 |    139 |	 1 |	  0 |00:00:00.01 |     149 |	  0 |	    |	    |	       |
    --------------------------------------------------------------------------------------------------------------------------------------------------------
    
    Predicate Information (identified by operation id):
    ---------------------------------------------------
    
       2 - filter( IS NOT NULL)
       3 - access("RELATIVESERIALNO"="BA"."SERIALNO")
       4 - filter("RELATIVESERIALNO" IS NOT NULL)
       5 - filter((("BA"."BUSINESSTYPE" LIKE '1%' OR "BA"."BUSINESSTYPE" LIKE '2%') AND "BA"."STATUSFLAG" IS NULL AND
    	      "BA"."BUSINESSTYPE"<>'1110008040' AND "BA"."BUSINESSTYPE"<>'4010' AND "BA"."BUSINESSTYPE"<>'1110008042' AND "BA"."BUSINESSTYPE"<>'1110008041'
    	      AND "BA"."BUSINESSTYPE"<>'4020'))
       6 - access("CUSTOMERID"='20131119000089')
           filter((("CUSTOMERID"=:B1 AND :B2<>'1020040') OR ("CUSTOMERID"=:B3 AND :B4='1020040')))
    
    
    41 rows selected.
    
    SQL> explain plan for select sum(nvl(GetBusinessZongE('BusinessApprove', BA.SerialNo), 0)) as BusinessSum,
           sum(nvl(GetBusinessChangKou('BusinessApprove', BA.SerialNo), 0)) as ApproveSum
      from Business_Approve BA
     where 1 = 1
       and not exists (select 'x'
              from Business_Contract
             where RelativeSerialNo = BA.SerialNo)
       and BA.StatusFlag is null
       and exists
       (select 'x'
              from Customer_Info
             where (EMcCustomerID = '' or CustomerID = '20131119000089')
             and 
             (
                   (BA.CustomerID = CustomerID and BA.BusinessType <> '1020040') or
                   (BA.ThirdPartyID2 = CustomerID and BA.BusinessType = '1020040')
             )
       )
       and (BA.BusinessType like '1%' or BA.BusinessType like '2%')
       and BA.BusinessType not in
           ('1110008040', '1110008041', '1110008042', '4010', '4020');  2    3    4    5    6    7    8    9   10   11   12   13   14   15   16   17   18   19   20   21  
    
    Explained.
    
    SQL> select * from table(dbms_xplan.display());
    
    PLAN_TABLE_OUTPUT
    --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    Plan hash value: 1312284355
    
    ------------------------------------------------------------------------------------------------------------------
    | Id  | Operation		| Name				 | Rows  | Bytes |TempSpc| Cost (%CPU)| Time	 |
    ------------------------------------------------------------------------------------------------------------------
    |   0 | SELECT STATEMENT	|				 |     1 |    58 |	 |  8626   (1)| 00:01:44 |
    |   1 |  SORT AGGREGATE 	|				 |     1 |    58 |	 |	      | 	 |
    |*  2 |   FILTER		|				 |	 |	 |	 |	      | 	 |
    |*  3 |    HASH JOIN RIGHT ANTI |				 |  1457 | 84506 |  4936K|  7169   (1)| 00:01:27 |
    |*  4 |     INDEX FAST FULL SCAN| PK_BC_RELATIVESERIALNO	 |   202K|  2565K|	 |   201   (1)| 00:00:03 |
    |*  5 |     TABLE ACCESS FULL	| BUSINESS_APPROVE		 |   145K|  6403K|	 |  6334   (1)| 00:01:17 |
    |*  6 |    INDEX UNIQUE SCAN	| BIN$oTAOXbMjMHLgQwoCgBIwcg==$0 |     1 |    16 |	 |     2   (0)| 00:00:01 |
    ------------------------------------------------------------------------------------------------------------------
    
    Predicate Information (identified by operation id):
    ---------------------------------------------------
    
       2 - filter( EXISTS (SELECT 0 FROM "CUSTOMER_INFO" "CUSTOMER_INFO" WHERE "CUSTOMERID"='20131119000089'
    	      AND ("CUSTOMERID"=:B1 AND :B2<>'1020040' OR "CUSTOMERID"=:B3 AND :B4='1020040')))
       3 - access("RELATIVESERIALNO"="BA"."SERIALNO")
       4 - filter("RELATIVESERIALNO" IS NOT NULL)
       5 - filter(("BA"."BUSINESSTYPE" LIKE '1%' OR "BA"."BUSINESSTYPE" LIKE '2%') AND "BA"."STATUSFLAG" IS
    	      NULL AND "BA"."BUSINESSTYPE"<>'1110008040' AND "BA"."BUSINESSTYPE"<>'4010' AND
    	      "BA"."BUSINESSTYPE"<>'1110008042' AND "BA"."BUSINESSTYPE"<>'1110008041' AND "BA"."BUSINESSTYPE"<>'4020')
       6 - access("CUSTOMERID"='20131119000089')
           filter("CUSTOMERID"=:B1 AND :B2<>'1020040' OR "CUSTOMERID"=:B3 AND :B4='1020040')
    
    26 rows selected.
    
    
    改写成;
     select sum(nvl(GetBusinessZongE('BusinessApprove', BA.SerialNo), 0)) as BusinessSum,
           sum(nvl(GetBusinessChangKou('BusinessApprove', BA.SerialNo), 0)) as ApproveSum
      from Business_Approve BA
      inner join (select CustomerID from Customer_Info
      where (EMcCustomerID = '' or CustomerID = '20131119000089')
      group by CustomerID) Customer_Info
      on ((case when BA.BusinessType= '1020040' then BA.ThirdPartyID2 else BA.CustomerID end))=Customer_Info.CustomerID
     where 1 = 1
       and not exists (select 'x'
              from Business_Contract
             where RelativeSerialNo = BA.SerialNo)
       and BA.StatusFlag is null
         and (BA.BusinessType like '1%' or BA.BusinessType like '2%')
       and BA.BusinessType not in
           ('1110008040', '1110008041', '1110008042', '4010', '4020');

  • 相关阅读:
    python学习之路-day3
    python学习之路-day2
    python学习之路-day1
    Hystrix断路器
    jmater的使用
    记录1
    springcloud-Gateway
    Quartz框架
    红黑树的左旋和右旋
    异步回调CompletableFuture
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13352235.html
Copyright © 2011-2022 走看看