日期:2014-05-17  浏览次数:20823 次

问个关于EXISTS的性能问题
现在写的sql,exists的子查询中,我用了GROUP BY ,查出来数据是不重复的。 但GROUP BY 本身就降低查询速度, 要是不用GROUP BY,子查询有重复,无所谓,外层查询结果是对的,不知道EXISTS中有重复数据,对性能影响咋样 

例1 SELECT ID FROM TABLE1 EXISTS (SELECT ID FROM TABLE2 WHERE TABLE1.id = TABLE2.ID AND ..... GROUP BY ID )
  相当于 SELECT ID FROM TABLE1 EXISTS (1,2,3,4,5)

例2 SELECT ID FROM TABLE1 EXISTS (SELECT ID FROM TABLE2 WHERE TABLE1.id = TABLE2.ID AND .....)
  相当于 SELECT ID FROM TABLE1 EXISTS (1,1,1,2,2,2,3,3,4,5)


PS:TABLE1 ID 是主键, TABLE2 ID 和 ID2  
  1的子查询有分组,2的子查询有重复数据,哪个性能高? 


------解决方案--------------------
用例2

例1有點多餘了,樓主可測測
------解决方案--------------------
同样用例2,你举得例子不完全正确。
相当于 SELECT ID FROM TABLE1 EXISTS (1,2,3,4,5) 错误,
SELECT ID FROM TABLE1 EXISTS (1,1,1,2,2,2,3,3,4,5) 也错误。

exists 里面的sql当有数据能关联的时候 返回为 真,否则为假,只要TABLE1.id = TABLE2.ID 用的上TABLE2 的索引,里面有没有重复记录数据库不关心。
------解决方案--------------------
SQL code

--下面的写法也是可以的
SELECT ID FROM TABLE1 EXISTS (SELECT 1 FROM TABLE2 WHERE TABLE1.id = TABLE2.ID AND ..... )
;
--按照你的理解
 SELECT ID FROM TABLE1 EXISTS (1,1,.....);--显然是不对的。

------解决方案--------------------
其实你何必问呢,直接试试不就知道了?
------解决方案--------------------
看执行计划了