zoukankan      html  css  js  c++  java
  • hash join驱动表问题

    explain plan for select c.oper_no, a.passbook_no, g.acct_no  
       from auto_savb_acct  g,
            auto_savb_acct  a,  
            (select * from comc_branch where substr(ctrl_bit,7,1)='0' )b,  
            auto_comc_clerk c,  
            comc_clerk_post d         
      where a.media_type = '3'  
        and substr(a.draw_mode, 1, 1) = '1'  
        and substr(a.status, 1, 1) = '0'  
        and g.media_type = '1'  
        and a.flag = '0'  
        and g.flag = '0'  
        and c.flag = '0'  
        and a.cur_code = 1  
        and g.cur_code = 1  
        and g.open_bran_code = c.bran_code  
        and a.open_bran_code = c.bran_code 
        and substr(g.status, 1, 1) = '0'  
        and c.post_no = d.post_no  
        and d.trans_code = '104106'  
        and c.bran_code=b.bran_code  
        and rownum < 2 ;
        
        select * from table(dbms_xplan.display());
    
    
     
    Plan hash value: 3242562701
     
    --------------------------------------------------------------------------------------------------
    | Id  | Operation                      | Name            | Rows  | Bytes | Cost (%CPU)| Time     |
    --------------------------------------------------------------------------------------------------
    |   0 | SELECT STATEMENT               |                 |     1 |   187 |  1593   (1)| 00:00:20 |
    |*  1 |  COUNT STOPKEY                 |                 |       |       |            |          |
    |   2 |   NESTED LOOPS                 |                 |     1 |   187 |  1593   (1)| 00:00:20 |
    |   3 |    NESTED LOOPS                |                 |     1 |   175 |  1593   (1)| 00:00:20 |
    |*  4 |     HASH JOIN                  |                 |     3 |   429 |  1590   (1)| 00:00:20 |
    |*  5 |      HASH JOIN                 |                 |     7 |   616 |   800   (1)| 00:00:10 |
    |*  6 |       TABLE ACCESS FULL        | AUTO_SAVB_ACCT  |     1 |    57 |   790   (1)| 00:00:10 |
    |*  7 |       TABLE ACCESS FULL        | AUTO_COMC_CLERK |   814 | 25234 |     9   (0)| 00:00:01 |
    |*  8 |      TABLE ACCESS FULL         | AUTO_SAVB_ACCT  |    31 |  1705 |   790   (1)| 00:00:10 |
    |*  9 |     TABLE ACCESS BY INDEX ROWID| COMC_BRANCH     |     1 |    32 |     1   (0)| 00:00:01 |
    |* 10 |      INDEX UNIQUE SCAN         | BRAN_IDX        |     1 |       |     0   (0)| 00:00:01 |
    |* 11 |    INDEX UNIQUE SCAN           | POST_IDX        |     1 |    12 |     0   (0)| 00:00:01 |
    --------------------------------------------------------------------------------------------------
     
    Predicate Information (identified by operation id):
    ---------------------------------------------------
     
       1 - filter(ROWNUM<2)
       4 - access("G"."OPEN_BRAN_CODE"="C"."BRAN_CODE")
       5 - access("A"."OPEN_BRAN_CODE"="C"."BRAN_CODE")
       6 - filter(SUBSTR("A"."DRAW_MODE",1,1)='1' AND SUBSTR("A"."STATUS",1,1)='0' AND 
                  "A"."MEDIA_TYPE"='3' AND "A"."CUR_CODE"=1 AND "A"."FLAG"='0')
       7 - filter("C"."FLAG"='0')
       8 - filter(SUBSTR("G"."STATUS",1,1)='0' AND "G"."MEDIA_TYPE"='1' AND "G"."CUR_CODE"=1 
                  AND "G"."FLAG"='0')
       9 - filter(SUBSTR("CTRL_BIT",7,1)='0')
      10 - access("C"."BRAN_CODE"="COMC_BRANCH"."BRAN_CODE")
      11 - access("D"."POST_NO"=TO_NUMBER("C"."POST_NO") AND "D"."TRANS_CODE"='104106')
    
    select count(*) from AUTO_SAVB_ACCT where SUBSTR("A"."DRAW_MODE",1,1)='1' AND SUBSTR("A"."STATUS",1,1)='0' AND 
                  "A"."MEDIA_TYPE"='3' AND "A"."CUR_CODE"=1 AND "A"."FLAG"='0')
    --4917
    
    SQL> select count(*) from AUTO_SAVB_ACCT ;
    
      COUNT(*)
    ----------
         52132
    
    SQL> select count(*) from AUTO_COMC_CLERK ;
    
      COUNT(*)
    ----------
           848
    
    
    此时HASH JOIN的驱动表为AUTO_SAVB_ACCT,这个相比被驱动表AUTO_COMC_CLERK体积大,交换驱动表后
    
    explain plan for select /*+ leading(c) */ c.oper_no, a.passbook_no, g.acct_no  
       from auto_savb_acct  g,
            auto_savb_acct  a,  
            (select * from comc_branch where substr(ctrl_bit,7,1)='0' )b,  
            auto_comc_clerk c,  
            comc_clerk_post d         
      where a.media_type = '3'  
        and substr(a.draw_mode, 1, 1) = '1'  
        and substr(a.status, 1, 1) = '0'  
        and g.media_type = '1'  
        and a.flag = '0'  
        and g.flag = '0'  
        and c.flag = '0'  
        and a.cur_code = 1  
        and g.cur_code = 1  
        and g.open_bran_code = c.bran_code  
        and a.open_bran_code = c.bran_code 
        and substr(g.status, 1, 1) = '0'  
        and c.post_no = d.post_no  
        and d.trans_code = '104106'  
        and c.bran_code=b.bran_code  
        and rownum < 2 ;
    
    Plan hash value: 2775533374
     
    --------------------------------------------------------------------------------------------------
    | Id  | Operation                      | Name            | Rows  | Bytes | Cost (%CPU)| Time     |
    --------------------------------------------------------------------------------------------------
    |   0 | SELECT STATEMENT               |                 |     1 |   187 |  1593   (1)| 00:00:20 |
    |*  1 |  COUNT STOPKEY                 |                 |       |       |            |          |
    |   2 |   NESTED LOOPS                 |                 |     1 |   187 |  1593   (1)| 00:00:20 |
    |   3 |    NESTED LOOPS                |                 |     1 |   175 |  1593   (1)| 00:00:20 |
    |*  4 |     HASH JOIN                  |                 |     3 |   429 |  1590   (1)| 00:00:20 |
    |*  5 |      HASH JOIN                 |                 |     7 |   616 |   800   (1)| 00:00:10 |
    |*  6 |       TABLE ACCESS FULL        | AUTO_COMC_CLERK |   814 | 25234 |     9   (0)| 00:00:01 |
    |*  7 |       TABLE ACCESS FULL        | AUTO_SAVB_ACCT  |     1 |    57 |   790   (1)| 00:00:10 |
    |*  8 |      TABLE ACCESS FULL         | AUTO_SAVB_ACCT  |    33 |  1815 |   790   (1)| 00:00:10 |
    |*  9 |     TABLE ACCESS BY INDEX ROWID| COMC_BRANCH     |     1 |    32 |     1   (0)| 00:00:01 |
    |* 10 |      INDEX UNIQUE SCAN         | BRAN_IDX        |     1 |       |     0   (0)| 00:00:01 |
    |* 11 |    INDEX UNIQUE SCAN           | POST_IDX        |     1 |    12 |     0   (0)| 00:00:01 |
    --------------------------------------------------------------------------------------------------
     
    Predicate Information (identified by operation id):
    ---------------------------------------------------
     
       1 - filter(ROWNUM<2)
       4 - access("G"."OPEN_BRAN_CODE"="C"."BRAN_CODE")
       5 - access("A"."OPEN_BRAN_CODE"="C"."BRAN_CODE")
       6 - filter("C"."FLAG"='0')
       7 - filter(SUBSTR("A"."DRAW_MODE",1,1)='1' AND SUBSTR("A"."STATUS",1,1)='0' AND 
                  "A"."MEDIA_TYPE"='3' AND "A"."CUR_CODE"=1 AND "A"."FLAG"='0')
       8 - filter(SUBSTR("G"."STATUS",1,1)='0' AND "G"."MEDIA_TYPE"='1' AND "G"."CUR_CODE"=1 
                  AND "G"."FLAG"='0')
       9 - filter(SUBSTR("CTRL_BIT",7,1)='0')
      10 - access("C"."BRAN_CODE"="COMC_BRANCH"."BRAN_CODE")
      11 - access("D"."POST_NO"=TO_NUMBER("C"."POST_NO") AND "D"."TRANS_CODE"='104106')

  • 相关阅读:
    进程间多线程同步三种方法
    C++ 生成随机数 srand()和rand()
    事件对象用于多线程之间的同步
    $.ajax()方法参数详解
    面向对象的属性
    对多选框进行操作,输出选中的多选框的个数
    jQuery如何检查某个元素在网页上是否存在
    关于$.fn
    c#基础班笔记
    Sublime Text 3的快捷键
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13352100.html
Copyright © 2011-2022 走看看