1、选择最有效率的表名顺序:ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。测试通过~
2、 WHERE子句中的连接顺序性能优化oraclesql

解决方案 »

  1.   

    2、 WHERE子句中的连接顺序
    越有效筛选数据的条件放在越右边,连接表条件放在最左边
      

  2.   


    前面我说的可能不太准确,我刚才测试了一下,11g下from 后表名的顺便不会影响查询的速度
    贴出执行计划如下:select count(1) from a;已用时间:  00: 00: 00.09执行计划
    ----------------------------------------------------------                      
    Plan hash value: 3918351354                                                     
                                                                                    
    -------------------------------------------------------------------             
    | Id  | Operation          | Name | Rows  | Cost (%CPU)| Time     |             
    -------------------------------------------------------------------             
    |   0 | SELECT STATEMENT   |      |     1 |     3   (0)| 00:00:01 |             
    |   1 |  SORT AGGREGATE    |      |     1 |            |          |             
    |   2 |   TABLE ACCESS FULL| A    |     4 |     3   (0)| 00:00:01 |             
    -------------------------------------------------------------------             
                                                                                    
    Note                                                                            
    -----                                                                           
       - dynamic sampling used for this statement                                   
    统计信息
    ----------------------------------------------------------                      
              4  recursive calls                                                    
              0  db block gets                                                      
             15  consistent gets                                                    
              0  physical reads                                                     
              0  redo size                                                          
            419  bytes sent via SQL*Net to client                                   
            416  bytes received via SQL*Net from client                             
              2  SQL*Net roundtrips to/from client                                  
              0  sorts (memory)                                                     
              0  sorts (disk)                                                       
              1  rows processed                                                     SQL> select count(1) from temp_a;已用时间:  00: 00: 00.01执行计划
    ----------------------------------------------------------                      
    Plan hash value: 2773624539                                                     
                                                                                    
    ---------------------------------------------------------------------           
    | Id  | Operation          | Name   | Rows  | Cost (%CPU)| Time     |           
    ---------------------------------------------------------------------           
    |   0 | SELECT STATEMENT   |        |     1 |     9   (0)| 00:00:01 |           
    |   1 |  SORT AGGREGATE    |        |     1 |            |          |           
    |   2 |   TABLE ACCESS FULL| TEMP_A | 16388 |     9   (0)| 00:00:01 |           
    ---------------------------------------------------------------------           
                                                                                    
    Note                                                                            
    -----                                                                           
       - dynamic sampling used for this statement                                   
    统计信息
    ----------------------------------------------------------                      
              4  recursive calls                                                    
              0  db block gets                                                      
             63  consistent gets                                                    
              0  physical reads                                                     
              0  redo size                                                          
            421  bytes sent via SQL*Net to client                                   
            416  bytes received via SQL*Net from client                             
              2  SQL*Net roundtrips to/from client                                  
              0  sorts (memory)                                                     
              0  sorts (disk)                                                       
              1  rows processed                                                     SQL> select * from a,temp_a;已选择65552行。已用时间:  00: 00: 01.15执行计划
    ----------------------------------------------------------                      
    Plan hash value: 3066928336                                                     
                                                                                    
    ------------------------------------------------------------------------------- 
    | Id  | Operation            | Name   | Rows  | Bytes | Cost (%CPU)| Time     | 
    ------------------------------------------------------------------------------- 
    |   0 | SELECT STATEMENT     |        | 65552 |  3968K|    36   (3)| 00:00:01 | 
    |   1 |  MERGE JOIN CARTESIAN|        | 65552 |  3968K|    36   (3)| 00:00:01 | 
    |   2 |   TABLE ACCESS FULL  | A      |     4 |   124 |     3   (0)| 00:00:01 | 
    |   3 |   BUFFER SORT        |        | 16388 |   496K|    33   (4)| 00:00:01 | 
    |   4 |    TABLE ACCESS FULL | TEMP_A | 16388 |   496K|     8   (0)| 00:00:01 | 
    ------------------------------------------------------------------------------- 
                                                                                    
    Note                                                                            
    -----                                                                           
       - dynamic sampling used for this statement                                   
    统计信息
    ----------------------------------------------------------                      
              7  recursive calls                                                    
              0  db block gets                                                      
             81  consistent gets                                                    
              0  physical reads                                                     
              0  redo size                                                          
        1232628  bytes sent via SQL*Net to client                                   
          48486  bytes received via SQL*Net from client                             
           4372  SQL*Net roundtrips to/from client                                  
              1  sorts (memory)                                                     
              0  sorts (disk)                                                       
          65552  rows processed                                                     SQL> select * from temp_a,a;已选择65552行。已用时间:  00: 00: 00.90执行计划
    ----------------------------------------------------------                      
    Plan hash value: 3066928336                                                     
                                                                                    
    ------------------------------------------------------------------------------- 
    | Id  | Operation            | Name   | Rows  | Bytes | Cost (%CPU)| Time     | 
    ------------------------------------------------------------------------------- 
    |   0 | SELECT STATEMENT     |        | 65552 |  3968K|    36   (3)| 00:00:01 | 
    |   1 |  MERGE JOIN CARTESIAN|        | 65552 |  3968K|    36   (3)| 00:00:01 | 
    |   2 |   TABLE ACCESS FULL  | A      |     4 |   124 |     3   (0)| 00:00:01 | 
    |   3 |   BUFFER SORT        |        | 16388 |   496K|    33   (4)| 00:00:01 | 
    |   4 |    TABLE ACCESS FULL | TEMP_A | 16388 |   496K|     8   (0)| 00:00:01 | 
    ------------------------------------------------------------------------------- 
                                                                                    
    Note                                                                            
    -----                                                                           
       - dynamic sampling used for this statement                                   
    统计信息
    ----------------------------------------------------------                      
              7  recursive calls                                                    
              0  db block gets                                                      
             81  consistent gets                                                    
              0  physical reads                                                     
              0  redo size                                                          
        1232628  bytes sent via SQL*Net to client                                   
          48486  bytes received via SQL*Net from client                             
           4372  SQL*Net roundtrips to/from client                                  
              1  sorts (memory)                                                     
              0  sorts (disk)                                                       
          65552  rows processed          
      

  3.   

    楼上测试时有没有清除sql缓存?