2017-01-18 2 views
0

私は標準のHR Oracleデータベースで練習しており、セット演算子INTERSECTの使用については疑問があります。私はこのような状況があります。使用自然結合と集合演算子交差の間にパフォーマンスの違いはありますか?

SELECT  employee_id, job_id, department_id 
FROM   employees 
NATURAL JOIN job_history; 

NATURAL JOIN Results

SELECT employee_id, job_id, department_id 
FROM employees 
INTERSECT 
SELECT employee_id, job_id, department_id 
FROM job_history; 

INTERSECT Results

どちらのステートメントが結果の同じセットを持っています。パフォーマンスの違いはありますか?ありがとう。

+2

あなたのデータに対して実行することで確認できます。 –

+0

SQL * DeveloperのEXPLAIN PLAN機能(F10?)を使用すると、それが表示されます。 – Zastai

+0

私の神、私はそれを見ていない!ありがとう – Rattlesnake

答えて

2

Natural joinは、intersectとは非常に異なる操作です。

両方のクエリで、両方のテーブルに同じ名前で存在する列のみを選択しているようです。 (それ以外の場合は、natural joinintersectを比較することは意味がありません)。これは、問題文で明確にする必要があります。

そして:同じemployee/job/departmentためjob_historyテーブルに複数の行がある場合、同じ行数は(employee_idemployeesにおけるPKであると仮定して)参加天然に存在します。一方、intersectは重複を削除します。したがって、あなたがこれを設定する方法でさえ、2つの操作は同じではありません - もしあなたがその前にSELECT DISTINCTに喜んでいなければ、それはずっとオーバーヘッドを追加します。

intersectが必要な場合は、intersect演算子を使用してください。あなたが同じ結果を得る別の方法を見つけたと思うときは、何かを見落としていることが多いでしょう(この場合重複の扱いなど)。

関連する問題