Pokud si myslíte, že implementace LEFT JOIN je INNER JOIN + více práce, pak je tento výsledek matoucí. Co když je implementace INNER JOIN (LEFT JOIN + filtrování)? Aha, už je to jasné.
V plánech dotazů je jediný rozdíl:uživatelé... extra:pomocí kde . To znamená filtrování. Existuje další krok filtrování v dotazu s vnitřním spojením.
Jedná se o jiný druh filtrování, než jaký se obvykle používá v klauzuli where. Je jednoduché vytvořit index na A na podporu této akce filtrování.
SELECT *
FROM A
WHERE A.ID = 3
Zvažte tento dotaz:
SELECT *
FROM A
LEFT JOIN B
ON A.ID = B.ID
WHERE B.ID is not null
Tento dotaz je ekvivalentní vnitřnímu spojení. Na B není žádný index, který by této akci filtrování pomohl. Důvodem je, že klauzule where uvádí podmínku výsledku spojení namísto podmínky B.