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

Oracleでは、が一意であると仮定して、次のクエリ(USER, HOBBY)を使用できます。GROUP BY

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

これにより、Oracleはデータに対して最大で1回のパスを実行しますが、INTERSECTは各クエリを個別に処理するため、2回のパスが必要になります。

于 2012-09-17T12:28:16.620 に答える
0

最高のパフォーマンスは、趣味 = 「スポーツ」または趣味 = 「ピアノ」のテーブルから選択したユーザーからのものです

しかし、これが単なる理論的な例である場合、多くのテストが行​​われてい ます。

ところで、クエリの実行時間を自分で試すよりも良い解決策はありません

于 2012-09-17T12:24:20.820 に答える