JOINs
の理解が正しいかどうかを確認しようとしています。テーブルジョイン中に実際に何が起こるのですか?
SELECT * FROM tableA
join tableB on tableA.someId = tableB.someId
join tableC on tableA.someId = tableC.someId;
は、次のようにRDMSは、基本的には同様の擬似コードを実行します::次のクエリの場合
同じsomeId
tableA
と
List tempResults
for each A_record in tableA
for each B_record in tableB
if (A_record.someId = B_record.someId)
tempResults.add(A_record)
List results
for each Temp_Record in tempResults
for each C_record in tableC
if (Temp_record.someId = C_record.someId)
results.add(C_record)
return results;
だから、基本的に複数のレコードを持っているtableB
とtableC
、とRDMSにはさらにスキャンが記録されますか? 3つのテーブルすべてに同じsomeId
のレコードがある場合、3つのテーブルすべてで本質的に全テーブルスキャンが実行されますか?
私の理解は正しいですか?
良い質問。しかし誰かがこれに答えることができるかどうかはわかりません。 ';)'間違いなく、同じことが背後で起きていると感じます。 –
T-SQL結合ステートメントをもっと理解したいですか?この[結合](https://mva.microsoft.com/en-US/training-courses/querying-with-transactsql-10530?l=BooD4g87_7904984382)は、それらを理解するのに良い方法です。 – Edward
[**この投稿は**](http://stackoverflow.com/questions/29795400/loop-join-in-sql-server-2008)ii有用です。 – Vikrant