首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

sql性能求赐教!

2013-06-26 
sql性能求指教!!!!如下2个sql:sql1:select * from table1 t1inner join table2 on t1.id t2.oidwhere t2

sql性能求指教!!!!
如下2个sql:
sql1:
     select * from table1 t1
    inner join table2 on t1.id = t2.oid
    where t2.name like '%XXX%'
sql2:
    select * from table1 t1 
    inner join table2 on t1.id = t2.oid and t2.name like '%XXX%'
以上2个sql哪个性能有差别吗?
[解决办法]
根据你的写法、做个简单测试:t1 10W行数据 、、t2 100W行数据

create table t1(id number);
create table t2(oid number,name varchar2(10));
insert into t1 select rownum from dual connect by level<=100000;
insert into t2 select rownum,rownum
[解决办法]
'a' from dual connect by level<=1000000;
commit;

sys@ORCL> set autot trace exp
sys@ORCL> ed
Wrote file afiedt.buf

  1  select * from t1
  2      inner join t2 on t1.id = t2.oid
  3*     where t2.name like '%XXX%'

sys@ORCL> /

Execution Plan
----------------------
Plan hash value: 2959412835

---------------------------------------

[解决办法]
 Id  
[解决办法]
 Operation          
[解决办法]
 Name 
[解决办法]
 Rows  
[解决办法]
 Bytes 
[解决办法]
 Cost (%CPU)
[解决办法]
 Time     
[解决办法]

---------------------------------------

[解决办法]
   0 
[解决办法]
 SELECT STATEMENT   
[解决办法]
      
[解决办法]
    64 
------解决方案--------------------


  2112 
[解决办法]
  1647   (3)
[解决办法]
 00:00:20 
[解决办法]


[解决办法]
*  1 
[解决办法]
  HASH JOIN         
[解决办法]
      
[解决办法]
    64 
[解决办法]
  2112 
[解决办法]
  1647   (3)
[解决办法]
 00:00:20 
[解决办法]


[解决办法]
*  2 
[解决办法]
   TABLE ACCESS FULL
[解决办法]
 T2   
[解决办法]
    64 
[解决办法]
  1280 
[解决办法]
  1600   (2)
[解决办法]
 00:00:20 
[解决办法]


[解决办法]
   3 
[解决办法]
   TABLE ACCESS FULL
[解决办法]
 T1   
[解决办法]
   103K
[解决办法]
  1314K
[解决办法]
    45   (5)
[解决办法]
 00:00:01 
[解决办法]

---------------------------------------


sys@ORCL> ed
Wrote file afiedt.buf

  1  select * from t1
  2*     inner join t2 on t1.id = t2.oid and t2.name like '%XXX%'


sys@ORCL> /

Execution Plan
----------------------
Plan hash value: 2959412835



---------------------------------------

[解决办法]
 Id  
[解决办法]
 Operation          
[解决办法]
 Name 
[解决办法]
 Rows  
[解决办法]
 Bytes 
[解决办法]
 Cost (%CPU)
[解决办法]
 Time     
[解决办法]

---------------------------------------

[解决办法]
   0 
[解决办法]
 SELECT STATEMENT   
[解决办法]
      
[解决办法]
    64 
[解决办法]
  2112 
[解决办法]
  1647   (3)
[解决办法]
 00:00:20 
[解决办法]


[解决办法]
*  1 
[解决办法]
  HASH JOIN         
[解决办法]
      
[解决办法]
    64 
[解决办法]
  2112 
[解决办法]
  1647   (3)
[解决办法]
 00:00:20 
[解决办法]


[解决办法]
*  2 
[解决办法]
   TABLE ACCESS FULL
[解决办法]
 T2   
[解决办法]
    64 
[解决办法]
  1280 
------解决方案--------------------


  1600   (2)
[解决办法]
 00:00:20 
[解决办法]


[解决办法]
   3 
[解决办法]
   TABLE ACCESS FULL
[解决办法]
 T1   
[解决办法]
   103K
[解决办法]
  1314K
[解决办法]
    45   (5)
[解决办法]
 00:00:01 
[解决办法]

---------------------------------------




可以看到、你的两个sql的执行计划完全一致、本质上讲这是两个完全相同的sql

热点排行