SQL查询效率的疑问
SQL查询效率的疑问
SQL2000,请问1语句和2语句效率哪个高?
1语句
if exists(select 1 from purchasedetail
inner join purchasedetail_z on purchasedetail.billid=purchasedetail_z.billid and purchasedetail.itemno=purchasedetail_z.itemno and purchasedetail_z.vipwlztid=0 ------注意这里
inner join material_z on material_z.materialid=purchasedetail.materialid and material_z.vipsywlztid=1
where purchasedetail.billid=@billid and purchasedetail.itemno=@itemno
)
begin
RAISERROR('请检查物料是否选择状态!%d',16,1)
ROLLBACK
RETURN
END
2语句
if exists(select 1 from purchasedetail
inner join purchasedetail_z on purchasedetail.billid=purchasedetail_z.billid and purchasedetail.itemno=purchasedetail_z.itemno
inner join material_z on material_z.materialid=purchasedetail.materialid and material_z.vipsywlztid=1
where purchasedetail.billid=@billid and purchasedetail.itemno=@itemno and purchasedetail_z.vipwlztid=0 ------注意这里
)
begin
RAISERROR('请检查物料是否选择状态!%d',16,1)
ROLLBACK
RETURN
END
[解决办法]
把两个语句放到一个查询页面上,然后按ctrl+m,然后按F5,看看对应的百分比,百分比小的开销小,sqlserver是基于开销的,开销较小的一般来说性能较好
[解决办法]
前一个效率高,因为在inner join的时候,已经把无用的数据剔除了。
[解决办法]
2个语句的效率一致,对比一下执行计划就知道了.
[解决办法]
对于INNER JOIN来说,条件放在ON中和放在WHERE中,是一模一样的,没有任何区别。可以认为是两种不同的写法。
但对于LEFT JOIN来说,需要注意了,条件放在ON和放在WHERE中,产生的结果是不一样的。具体可参考SQL SERVER 2005技术内幕T-SQL查询,第一章