1

我想从表格中选择结果

USER HOBBY
John Sport
Ann  Piano
Lee  Reading
Ann  Sport
Lee  Piano

我想寻找有不止一个共同爱好的人。哪个查询有更好的性能,

select user from table where hobby = "sport"
intersect 
select user from table where hobby = "piano"

或者

select user from table where user in (select user from table where hobby = "piano") and where hobby = "sport"?
4

2 回答 2

0

最佳性能来自从表中选择用户,其中爱好 =“运动”或爱好 =“钢琴”

但如果这只是一个理论例子,那么已经做了很多测试,这里有一些: http ://www.execsql.com/post/intersectexcept-versus-innot-in

顺便说一句,没有比自己尝试查询的执行时间更好的解决方案

于 2012-09-17T12:24:20.820 回答
0

在 Oracle 中,假设(USER, HOBBY)是唯一的,您可以使用GROUP BY查询:

SELECT user
  FROM user_hobby
 WHERE hobby IN ('piano', 'sport')
 GROUP BY user
HAVING COUNT(*) = 2

这将使 Oracle 最多对数据执行一次传递,而 INTERSECT 将分别处理每个查询,因此需要两次传递。

于 2012-09-17T12:28:16.620 回答