sql >> Databáze >  >> RDS >> Mysql

Levé spojení předčí vnitřní spojení?

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.



  1. Návratová hodnota uložené procedury MySQL

  2. Oracle Instant Client pro zařízení Debian založené na ARM

  3. Co je opakem GROUP_CONCAT v MySQL?

  4. Zkontrolujte, zda v Oracle existuje tabulka