Oracle sql性能优化定律

Oracle sql性能优化定理1、选择最有效率的表名顺序:ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名

Oracle sql性能优化定理
1、选择最有效率的表名顺序:ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。测试通过~
2、 WHERE子句中的连接顺序 性能优化 oracle sql
[解决办法]
你的第1条应该在10g之前是适用的吧
[解决办法]
顺序什么的确实重要

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

引用:
Quote: 引用:

你的第1条应该在10g之前是适用的吧
我不知道啊,我现在用的就是10g,测试确实会快~


前面我说的可能不太准确,我刚才测试了一下,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          


[解决办法]
楼上测试时有没有清除sql缓存?