+ -
当前位置:首页 → 问答吧 → 问个关于EXISTS的性能问题

问个关于EXISTS的性能问题

时间:2011-11-17

来源:互联网

现在写的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的子查询有重复数据,哪个性能高? 

作者: accomp   发布时间: 2011-11-17

用例2

例1有點多餘了,樓主可測測

作者: roy_88   发布时间: 2011-11-17

同样用例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 的索引,里面有没有重复记录数据库不关心。

作者: BenChiM888   发布时间: 2011-11-17

SQL code

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



作者: BenChiM888   发布时间: 2011-11-17

sql文以我写的为准,里面有关联条件 。下面写的1,2,3 只是为了便于理解 

我就是想知道 ,EXISTS 后面的子查询有重复数据时,对性能有什么影响

作者: accomp   发布时间: 2011-11-17

其实你何必问呢,直接试试不就知道了?

作者: dawugui   发布时间: 2011-11-17

引用 5 楼 dawugui 的回复:
其实你何必问呢,直接试试不就知道了?

结果是一样的 我想知道效率上有什么区别

作者: accomp   发布时间: 2011-11-17

热门下载

更多