当前位置: 代码迷 >> Oracle技术 >> 请教这两段同一功能的SQL哪一个效率要高?这两个有什么区别
  详细解决方案

请教这两段同一功能的SQL哪一个效率要高?这两个有什么区别

热度:403   发布时间:2016-04-24 08:05:20.0
请问这两段同一功能的SQL哪一个效率要高?这两个有什么区别?
请问这两段同一功能的SQL哪一个效率要高?这两个有什么区别?


select car.car_listno,
       car_line.source_bill_id,
       (select sa_out_bill_head_id
          from inv_out_bill_line bill_line
         where car_line.source_bill_id = bill_line.sa_out_bill_head_id) sa_out_bill_head_id
  from drp_numbercar car, drp_trans_carno_line car_line
 where car.carno_id = car_line.carno_id
   and car.car_listno = '20150508001';
--------------------------------------------------------------------------------------------------------------------------------------------------
select car.car_listno, car_line.source_bill_id, sa_out_bill_head_id
  from drp_numbercar        car,
       drp_trans_carno_line car_line,
       inv_out_bill_line    bill_line
 where car.carno_id = car_line.carno_id
   and car_line.source_bill_id = bill_line.sa_out_bill_head_id
   and car.car_listno = '20150508001';

谢谢!
------解决思路----------------------
使用左连接的话 应该会更快点  left join
------解决思路----------------------
严格的说,这两种写法并不等价。

如果你把第二种,改成 left join ,就等价了。

当你 inv_out_bill_line 表中的数据量比较少的时候,前一种比较有优势 ,比如小于 300 行。

前一种是 标量子查询。
------解决思路----------------------
两个语句逻辑并不完全一样。效率也不能确定哪个更高,要根据执行计划来决定,与各表数据量等等有很大关系
------解决思路----------------------
第一个会好一点