读书人

使用INNER JOIN 和EXISTS过滤数据那个

发布时间: 2012-01-30 21:15:58 作者: rapoo

使用INNER JOIN 和EXISTS过滤数据那个执行效率更高
例子:
select *
from dbo.Gy_InOutSub INNER JOIN dbo.Gy_InOutMain ON dbo.Gy_InOutSub.InOutMainID=dbo.Gy_InOutMain.=InOutMainID

select *
from dbo.Gy_InOutSub where exists( select 1 from Gy_InOutMain where InOutMainID=Gy_InOutSub.InOutMainID)

主要是为了获得dbo.Gy_InOutSub表中的数据,使用 dbo.Gy_InOutMain 中的InOutMainID字段来过滤,但是并没有提取dbo.Gy_InOutMain中的数据,
使用那种方法执行效率更能高?为什么?先谢谢大家了


[解决办法]
如果dbo.Gy_InOutMain 的InOutMainID有重复,这没有可比性,因为两个查询的结果是不同的

如果dbo.Gy_InOutMain 的InOutMainID没有重复,个人认为效率差不多,如果两表的InOutMainID有索引,都将用到索引


[解决办法]
第一种方法好。
如果在InOutMainID数据列上创建了索引,则方法一的内连接就会走index seek的执行计划;相反,方法二是走index scan的执行计划,而通常seek的性能要比scan好。

读书人网 >SQL Server

热点推荐