0

2つのテーブルがあると仮定します。

   Student                           Test

Id    Name                   TestId   Score  StudentId
--    ----                   ------   ----  ---------  
1    Mark                      774     100       1   
2     Sam                      774      89       2  
3    John                      775      78       3

次に、各学生の学生名、テストID、スコアを印刷する必要があります。

どちらも同じ結果になることは知っていますが、パフォーマンスの点ではどちらが優れていますか?2番目の方法はデカルト積を見つけてからfilter(where句)を適用しますか?

1.Select test.testid,student.name,test.score 
  from student 
  join test 
  on test.studentid=student.id

2.Select test.testid,student.name,test.score  
  from student,test 
  where test.studentid=student.id
4

2 に答える 2

1

私はあなたの質問に直接答えるつもりはありませんが、むしろ将来そのような問題を解決するためのツールをあなたに提供します。

Oracleは、クエリがどのように実行されるかを確認する方法を提供します。テーブルへのアクセスがどのように実行されるか、クエリの実行にかかる時間、インデックスが使用されているかどうかなどを確認できます。

コマンドは次のとおりです。

EXPLAINPLANSETAUTOTRACE

あなたの場合、それはこれと同じくらい簡単でしょう:

EXPLAIN PLAN FOR
Select test.testid,student.name,test.score 
from student 
join test 
on test.studentid=student.id;

EXPLAIN PLAN FOR
Select test.testid,student.name,test.score  
from student,test 
where test.studentid=student.id;

または自動トレースを使用する:

Set autotrace on;

Select test.testid,student.name,test.score 
from student 
join test 
on test.studentid=student.id;

Select test.testid,student.name,test.score  
from student,test 
where test.studentid=student.id;

の場合EXPLAIN PLAN、結果は特別なテーブルに保存され、クエリして確認できます。リンクしたドキュメントをチェックして、それを使って何ができるかを確認してください。

于 2012-07-26T07:01:25.833 に答える
-1

両方のクエリの実行プランは等しくなります(少なくともMS SQLでは実行プランがあります)。2番目のクエリが最適化されます

于 2012-07-26T09:24:06.027 に答える