Filtrování spojení pouze pomocí WHERE
může být v některých běžných scénářích extrémně neefektivní. Například:
SELECT * FROM people p, companies c
WHERE p.companyID = c.id AND p.firstName = 'Daniel'
Většina databází provede tento dotaz zcela doslovně, nejprve vezme kartézský produkt
z people
a companies
tabulky a pak filtrování podle těch, které mají odpovídající companyID
a id
pole. Zatímco plně neomezený součin neexistuje nikde jinde než v paměti a poté jen na okamžik, jeho výpočet nějakou dobu trvá.
Lepší přístup je seskupit omezení pomocí JOIN
kde je to relevantní. To je nejen subjektivně lépe čitelné, ale také mnohem efektivnější. Tedy:
SELECT * FROM people p JOIN companies c ON p.companyID = c.id
WHERE p.firstName = 'Daniel'
Je to trochu delší, ale databáze je schopná se podívat na ON
klauzuli a použijte ji k výpočtu plně omezeného JOIN
přímo, než začít od všeho a pak omezení dolů. To je rychlejší na výpočet (zejména u velkých datových sad a/nebo spojení mnoha tabulek) a vyžaduje méně paměti.
Měním každý dotaz, který vidím a který používá „čárku JOIN
" syntaxe. Podle mého názoru je jediným účelem jeho existence stručnost. Vzhledem k dopadu na výkon si nemyslím, že je to přesvědčivý důvod.