日期:2014-05-18  浏览次数:20597 次

使用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好。