我写得一个视图v_yy_dksjtjb,其中有2层的嵌套,大量的数据处理,非常复杂。记录总数31万多条。语句1:
select * from v_yy_dksjtjb t where dkdm like 'LP3A01'
执行耗时0.9秒
语句2:
select * from v_yy_dksjtjb t where dkdm='LP3A01'
执行耗时82秒!
语句3:
select * from v_yy_dksjtjb t where dkdm in ('LP3A01')
执行耗时73秒!这是为什么?如何能进行优化?

解决方案 »

  1.   

    对,执行计划贴出来。
    sqlplus登上去,
    set autotrace on
    之后执行这三条语句。
      

  2.   

    select * from v_yy_dksjtjb t where dkdm like 'LP3A01'1  
    2 -----------------------------------------------------------------------------------------------------------
    3 | Id  | Operation                                     | Name         | Rows  | Bytes |TempSpc| Cost (%CPU)|
    4 -----------------------------------------------------------------------------------------------------------
    5 |   0 | SELECT STATEMENT                              |              |     2 |   786 |       |  2752   (2)|
    6 |   1 |  VIEW                                         | V_YY_DKSJTJB |     2 |   786 |       |  2752   (2)|
    7 |   2 |   WINDOW SORT                                 |              |     2 |   684 |       |  2752   (2)|
    8 |   3 |    HASH JOIN OUTER                            |              |     2 |   684 |       |  2751   (2)|
    9 |   4 |     NESTED LOOPS                              |              |     2 |   656 |       |  2737   (2)|
    10 |   5 |      TABLE ACCESS BY INDEX ROWID              | YY_DKJCSJ    |     1 |    11 |       |     2   (0)|
    11 |   6 |       INDEX UNIQUE SCAN                       | DKJCSJ_DKDM  |     1 |       |       |     1   (0)|
    12 |   7 |      VIEW                                     |              |     2 |   634 |       |  2735   (2)|
    13 |   8 |       WINDOW SORT                             |              |   957 |   223K|       |  2735   (2)|
    14 |   9 |        WINDOW SORT                            |              |   957 |   223K|       |  2735   (2)|
    15 |  10 |         VIEW                                  | V_YY_DKYDYCL |   957 |   223K|       |  2733   (2)|
    16 |  11 |          SORT ORDER BY                        |              |   957 |   246K|       |  2733   (2)|
    17 |  12 |           HASH JOIN RIGHT OUTER               |              |   957 |   246K|       |  2732   (2)|
    18 |  13 |            VIEW                               |              |     2 |   324 |       |    15   (7)|
    19 |  14 |             SORT GROUP BY                     |              |     2 |   154 |       |    15   (7)|
    20 |  15 |              NESTED LOOPS                     |              |     2 |   154 |       |    14   (0)|
    21 |  16 |               NESTED LOOPS                    |              |     2 |    94 |       |    10   (0)|
    22 |  17 |                VIEW                           |              |     1 |    13 |       |     2   (0)|
    23 |  18 |                 COUNT                         |              |       |       |       |            |
    24 |  19 |                  CONNECT BY WITHOUT FILTERING |              |       |       |       |            |
    25 |  20 |                   FAST DUAL                   |              |     1 |       |       |     2   (0)|
    26 |  21 |                TABLE ACCESS FULL              | YY_YJSJLR    |     2 |    68 |       |     8   (0)|
    27 |  22 |               TABLE ACCESS BY INDEX ROWID     | YD_DBA04     |     1 |    30 |       |     2   (0)|
    28 |  23 |                INDEX UNIQUE SCAN              | SYS_C0015580 |     1 |       |       |     1   (0)|
    29 |  24 |            HASH JOIN RIGHT OUTER              |              |   957 | 97614 |       |  2716   (2)|
    30 |  25 |             VIEW                              |              |     1 |    66 |       |    10  (10)|
    31 |  26 |              SORT GROUP BY                    |              |     1 |    64 |       |    10  (10)|
    32 |  27 |               NESTED LOOPS                    |              |     1 |    64 |       |     9   (0)|
    33 |  28 |                NESTED LOOPS                   |              |     1 |    42 |       |     7   (0)|
    34 |  29 |                 VIEW                          |              |     1 |    13 |       |     2   (0)|
    35 |  30 |                  COUNT                        |              |       |       |       |            |
    36 |  31 |                   CONNECT BY WITHOUT FILTERING|              |       |       |       |            |
    37 |  32 |                    FAST DUAL                  |              |     1 |       |       |     2   (0)|
    38 |  33 |                 TABLE ACCESS FULL             | YY_SJSJLR    |     1 |    29 |       |     5   (0)|
    39 |  34 |                TABLE ACCESS BY INDEX ROWID    | YD_DBA05     |     1 |    22 |       |     2   (0)|
    40 |  35 |                 INDEX UNIQUE SCAN             | SYS_C0015601 |     1 |       |       |     1   (0)|
    41 |  36 |             NESTED LOOPS                      |              |   957 | 34452 |       |  2706   (2)|
    42 |  37 |              TABLE ACCESS BY INDEX ROWID      | YY_DKJCSJ    |     1 |    24 |       |     2   (0)|
    43 |  38 |               INDEX UNIQUE SCAN               | DKJCSJ_DKDM  |     1 |       |       |     1   (0)|
    44 |  39 |              VIEW                             |              |   957 | 11484 |       |  2704   (2)|
    45 |  40 |               NESTED LOOPS                    |              |   584K|  6852K|       |  2704   (2)|
    46 |  41 |                INDEX UNIQUE SCAN              | DKJCSJ_DKDM  |     1 |     7 |       |     1   (0)|
    47 |  42 |                VIEW                           |              |   584K|  2855K|       |  2703   (2)|
    48 |  43 |                 VIEW                          |              |   584K|  2855K|       |  2703   (2)|
    49 |  44 |                  SORT UNIQUE                  |              |   584K|  3997K|    17M|  2703  (26)|
    50 |  45 |                   UNION-ALL                   |              |       |       |       |            |
    51 |  46 |                    TABLE ACCESS FULL          | YY_DBA04_DK  |   439K|  3004K|       |   515   (1)|
    52 |  47 |                    TABLE ACCESS FULL          | YY_DBA05_DK  |   145K|   992K|       |   167   (2)|
    53 |  48 |     TABLE ACCESS FULL                         | YD_DAB09     |  2585 | 36190 |       |    13   (0)|
    54 -----------------------------------------------------------------------------------------------------------
    55  
    56 Note
    57 -----
    58    - 'PLAN_TABLE' is old version
      

  3.   

    select * from v_yy_dksjtjb t where dkdm = 'LP3A01'1  
    2 -----------------------------------------------------------------------------------------------------------
    3 | Id  | Operation                                     | Name         | Rows  | Bytes |TempSpc| Cost (%CPU)|
    4 -----------------------------------------------------------------------------------------------------------
    5 |   0 | SELECT STATEMENT                              |              |   584K|   219M|       |   139K  (1)|
    6 |   1 |  VIEW                                         | V_YY_DKSJTJB |   584K|   219M|       |   139K  (1)|
    7 |   2 |   WINDOW SORT                                 |              |   584K|   190M|   397M|   139K  (1)|
    8 |   3 |    HASH JOIN RIGHT OUTER                      |              |   584K|   190M|       | 96941   (1)|
    9 |   4 |     TABLE ACCESS FULL                         | YD_DAB09     |  2585 | 36190 |       |    13   (0)|
    10 |   5 |     MERGE JOIN                                |              |   584K|   182M|       | 96924   (1)|
    11 |   6 |      VIEW                                     |              |   584K|   176M|       | 96915   (1)|
    12 |   7 |       WINDOW SORT                             |              |   584K|   133M|   315M| 96915   (1)|
    13 |   8 |        WINDOW SORT                            |              |   584K|   133M|   315M| 96915   (1)|
    14 |   9 |         VIEW                                  | V_YY_DKYDYCL |   584K|   133M|       | 36546   (1)|
    15 |  10 |          SORT ORDER BY                        |              |   584K|   147M|   338M| 36546   (1)|
    16 |  11 |           HASH JOIN RIGHT OUTER               |              |   584K|   147M|       |  3269   (2)|
    17 |  12 |            VIEW                               |              |   127 | 20574 |       |   412   (1)|
    18 |  13 |             HASH GROUP BY                     |              |   127 |  9779 |       |   412   (1)|
    19 |  14 |              NESTED LOOPS                     |              |   127 |  9779 |       |   411   (0)|
    20 |  15 |               NESTED LOOPS                    |              |   208 |  9776 |       |    10   (0)|
    21 |  16 |                VIEW                           |              |     1 |    13 |       |     2   (0)|
    22 |  17 |                 COUNT                         |              |       |       |       |            |
    23 |  18 |                  CONNECT BY WITHOUT FILTERING |              |       |       |       |            |
    24 |  19 |                   FAST DUAL                   |              |     1 |       |       |     2   (0)|
    25 |  20 |                TABLE ACCESS FULL              | YY_YJSJLR    |   208 |  7072 |       |     8   (0)|
    26 |  21 |               TABLE ACCESS BY INDEX ROWID     | YD_DBA04     |     1 |    30 |       |     2   (0)|
    27 |  22 |                INDEX UNIQUE SCAN              | SYS_C0015580 |     1 |       |       |     1   (0)|
    28 |  23 |            HASH JOIN RIGHT OUTER              |              |   584K|    56M|       |  2853   (2)|
    29 |  24 |             VIEW                              |              |    49 |  3234 |       |   134   (1)|
    30 |  25 |              HASH GROUP BY                    |              |    49 |  3136 |       |   134   (1)|
    31 |  26 |               NESTED LOOPS                    |              |    49 |  3136 |       |   133   (0)|
    32 |  27 |                NESTED LOOPS                   |              |    63 |  2646 |       |     7   (0)|
    33 |  28 |                 VIEW                          |              |     1 |    13 |       |     2   (0)|
    34 |  29 |                  COUNT                        |              |       |       |       |            |
    35 |  30 |                   CONNECT BY WITHOUT FILTERING|              |       |       |       |            |
    36 |  31 |                    FAST DUAL                  |              |     1 |       |       |     2   (0)|
    37 |  32 |                 TABLE ACCESS FULL             | YY_SJSJLR    |    63 |  1827 |       |     5   (0)|
    38 |  33 |                TABLE ACCESS BY INDEX ROWID    | YD_DBA05     |     1 |    22 |       |     2   (0)|
    39 |  34 |                 INDEX UNIQUE SCAN             | SYS_C0015601 |     1 |       |       |     1   (0)|
    40 |  35 |             HASH JOIN                         |              |   584K|    20M|       |  2716   (2)|
    41 |  36 |              TABLE ACCESS FULL                | YY_DKJCSJ    |   611 | 14664 |       |     8   (0)|
    42 |  37 |              VIEW                             |              |   584K|  6852K|       |  2704   (2)|
    43 |  38 |               NESTED LOOPS                    |              |   584K|  6852K|       |  2704   (2)|
    44 |  39 |                INDEX UNIQUE SCAN              | DKJCSJ_DKDM  |     1 |     7 |       |     1   (0)|
    45 |  40 |                VIEW                           |              |   584K|  2855K|       |  2703   (2)|
    46 |  41 |                 VIEW                          |              |   584K|  2855K|       |  2703   (2)|
    47 |  42 |                  SORT UNIQUE                  |              |   584K|  3997K|    17M|  2703  (26)|
      

  4.   

    select * from v_yy_dksjtjb t where dkdm in ('LP3A01')1  
    2 -----------------------------------------------------------------------------------------------------------
    3 | Id  | Operation                                     | Name         | Rows  | Bytes |TempSpc| Cost (%CPU)|
    4 -----------------------------------------------------------------------------------------------------------
    5 |   0 | SELECT STATEMENT                              |              |   584K|   219M|       |   139K  (1)|
    6 |   1 |  VIEW                                         | V_YY_DKSJTJB |   584K|   219M|       |   139K  (1)|
    7 |   2 |   WINDOW SORT                                 |              |   584K|   190M|   397M|   139K  (1)|
    8 |   3 |    HASH JOIN RIGHT OUTER                      |              |   584K|   190M|       | 96941   (1)|
    9 |   4 |     TABLE ACCESS FULL                         | YD_DAB09     |  2585 | 36190 |       |    13   (0)|
    10 |   5 |     MERGE JOIN                                |              |   584K|   182M|       | 96924   (1)|
    11 |   6 |      VIEW                                     |              |   584K|   176M|       | 96915   (1)|
    12 |   7 |       WINDOW SORT                             |              |   584K|   133M|   315M| 96915   (1)|
    13 |   8 |        WINDOW SORT                            |              |   584K|   133M|   315M| 96915   (1)|
    14 |   9 |         VIEW                                  | V_YY_DKYDYCL |   584K|   133M|       | 36546   (1)|
    15 |  10 |          SORT ORDER BY                        |              |   584K|   147M|   338M| 36546   (1)|
    16 |  11 |           HASH JOIN RIGHT OUTER               |              |   584K|   147M|       |  3269   (2)|
    17 |  12 |            VIEW                               |              |   127 | 20574 |       |   412   (1)|
    18 |  13 |             HASH GROUP BY                     |              |   127 |  9779 |       |   412   (1)|
    19 |  14 |              NESTED LOOPS                     |              |   127 |  9779 |       |   411   (0)|
    20 |  15 |               NESTED LOOPS                    |              |   208 |  9776 |       |    10   (0)|
    21 |  16 |                VIEW                           |              |     1 |    13 |       |     2   (0)|
    22 |  17 |                 COUNT                         |              |       |       |       |            |
    23 |  18 |                  CONNECT BY WITHOUT FILTERING |              |       |       |       |            |
    24 |  19 |                   FAST DUAL                   |              |     1 |       |       |     2   (0)|
    25 |  20 |                TABLE ACCESS FULL              | YY_YJSJLR    |   208 |  7072 |       |     8   (0)|
    26 |  21 |               TABLE ACCESS BY INDEX ROWID     | YD_DBA04     |     1 |    30 |       |     2   (0)|
    27 |  22 |                INDEX UNIQUE SCAN              | SYS_C0015580 |     1 |       |       |     1   (0)|
    28 |  23 |            HASH JOIN RIGHT OUTER              |              |   584K|    56M|       |  2853   (2)|
    29 |  24 |             VIEW                              |              |    49 |  3234 |       |   134   (1)|
    30 |  25 |              HASH GROUP BY                    |              |    49 |  3136 |       |   134   (1)|
    31 |  26 |               NESTED LOOPS                    |              |    49 |  3136 |       |   133   (0)|
    32 |  27 |                NESTED LOOPS                   |              |    63 |  2646 |       |     7   (0)|
    33 |  28 |                 VIEW                          |              |     1 |    13 |       |     2   (0)|
    34 |  29 |                  COUNT                        |              |       |       |       |            |
    35 |  30 |                   CONNECT BY WITHOUT FILTERING|              |       |       |       |            |
    36 |  31 |                    FAST DUAL                  |              |     1 |       |       |     2   (0)|
    37 |  32 |                 TABLE ACCESS FULL             | YY_SJSJLR    |    63 |  1827 |       |     5   (0)|
    38 |  33 |                TABLE ACCESS BY INDEX ROWID    | YD_DBA05     |     1 |    22 |       |     2   (0)|
    39 |  34 |                 INDEX UNIQUE SCAN             | SYS_C0015601 |     1 |       |       |     1   (0)|
    40 |  35 |             HASH JOIN                         |              |   584K|    20M|       |  2716   (2)|
    41 |  36 |              TABLE ACCESS FULL                | YY_DKJCSJ    |   611 | 14664 |       |     8   (0)|
    42 |  37 |              VIEW                             |              |   584K|  6852K|       |  2704   (2)|
    43 |  38 |               NESTED LOOPS                    |              |   584K|  6852K|       |  2704   (2)|
    44 |  39 |                INDEX UNIQUE SCAN              | DKJCSJ_DKDM  |     1 |     7 |       |     1   (0)|
    45 |  40 |                VIEW                           |              |   584K|  2855K|       |  2703   (2)|
    46 |  41 |                 VIEW                          |              |   584K|  2855K|       |  2703   (2)|
    47 |  42 |                  SORT UNIQUE                  |              |   584K|  3997K|    17M|  2703  (26)|
      

  5.   

    like采用的地嵌套循环(nest loop) 而 = 采用的是合并连接(merge)
    nest loop join: 扫描驱动表(如果有排序,按照 排序字段 排序后),取驱动表的逐行记录与被驱动表对比.
              NESTED LOOPS有一个优点是:可以先返回已经
               连接的行,而不必等待所有的连接操作处理完才返回数据,
               这可以实现快速的响应时间。nest loop比merge快。。