Filtrowanie łączy wyłącznie za pomocą WHERE może być bardzo nieefektywne w niektórych typowych sytuacjach.Na przykład:
SELECT * FROM people p, companies c WHERE p.companyID = c.id AND p.firstName = 'Daniel'
Większość baz danych będzie wykonać to zapytanie dosłownie, najpierw biorąc iloczyn kartezjański ludzi i firm tabel, a następnie filtrowany przez te, które mają pasujące pola companyID i id. Podczas gdy w pełni nieskrępowany produkt nie istnieje nigdzie poza pamięcią, a potem tylko przez chwilę, jego obliczenie zajmuje trochę czasu.
Lepszym podejściem jest grupowanie wiązań za pomocą JOIN w odpowiednich miejscach. Jest to nie tylko subiektywnie łatwiejsze do odczytania, ale także znacznie wydajniejsze. Wygląda następująco:
SELECT * FROM people p JOIN companies c ON p.companyID = c.id
WHERE p.firstName = 'Daniel'
Jest to trochę dłużej, ale baza danych jest w stanie spojrzeć w klauzuli ON i używać go obliczyć pełni ograniczone DOŁĄCZ bezpośrednio, zamiast koncentrować się wszystkiego, a następnie ograniczenie w dół. Jest to szybsze do obliczenia (zwłaszcza w przypadku dużych zestawów danych i/lub łączenia wielu tabel) i wymaga mniej pamięci.
Zmieniam każde zapytanie, które widzę, używając składni "comma JOIN". Moim zdaniem jedynym celem jego istnienia jest zwięzłość. Biorąc pod uwagę wpływ na wydajność, nie sądzę, że jest to istotny powód.
Uzgodnione, pierwsze jest lepsze dla przejrzystości i kontrole; łatwiej jest zmienić typ łączenia, jeśli chcesz. –