我在试着看看我对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