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