Próbuję sprawdzić, czy moje zrozumienie JOINs
jest poprawne.Co tak naprawdę dzieje się podczas łączenia tabel?
Dla następującego zapytania:
SELECT * FROM tableA
join tableB on tableA.someId = tableB.someId
join tableC on tableA.someId = tableC.someId;
Czy RDMS zasadzie wykonać podobną Pseudokod następująco:
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;
więc w zasadzie im więcej rekordów z tym samym someId
tableA
ma z tableB
i tableC
, w więcej rekordów, które RDMS ma skan? Jeśli wszystkie 3 tabele mają zapisy z tym samym someId
, to w zasadzie pełne skanowanie tabeli odbywa się na wszystkich 3 stołach?
Czy moje zrozumienie jest prawidłowe?
Ładne pytanie. Ale nie jestem pewien, czy ktoś może odpowiedzieć na to pytanie. ';)' Zdecydowanie czuję, że to samo dzieje się z tyłu. –
Chcesz zrozumieć instrukcje łączenia T-SQL więcej? To [join] (https://mva.microsoft.com/en-US/training-courses/querying-with-transactsql-10530?l=BooD4g87_7904984382) jest dobrym elementem do ich zrozumienia. – Edward
[** Ten post **] (http://stackoverflow.com/questions/29795400/loop-join-in-sql-server-2008) ii użyteczne. – Vikrant