我在試着看看我對JOINs
的理解是否正確。在表JOIN中實際發生了什麼?
對於以下查詢:
SELECT * FROM tableA
join tableB on tableA.someId = tableB.someId
join tableC on tableA.someId = tableC.someId;
是否RDMS如下基本執行類似的僞代碼:
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;
所以基本上更多的記錄與同someId
tableA
有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