问个关于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,.....);--显然是不对的。
------解决方案--------------------
其实你何必问呢,直接试试不就知道了?
------解决方案--------------------
看执行计划了