Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Left Join osiąga lepsze wyniki niż Inner Join?

Jeśli uważasz, że implementacja LEFT JOIN to INNER JOIN + więcej pracy, to ten wynik jest mylący. Co jeśli implementacja INNER JOIN to (LEFT JOIN + filtrowanie)? Ach, teraz jest jasne.

W planach zapytań jedyna różnica jest taka:użytkownicy... dodatkowo:przy użyciu gdzie . Oznacza to filtrowanie. Jest dodatkowy krok filtrowania w zapytaniu z wewnętrznym sprzężeniem.

Jest to inny rodzaj filtrowania niż zwykle stosowany w klauzuli where. Utworzenie indeksu na A w celu obsługi tej akcji filtrowania jest proste.

SELECT *
FROM A
WHERE A.ID = 3

Rozważ to zapytanie:

SELECT *
FROM A
  LEFT JOIN B
  ON A.ID = B.ID
WHERE B.ID is not null

To zapytanie jest równoważne sprzężeniu wewnętrznemu. Nie ma indeksu na B, który pomoże w tej akcji filtrowania. Powodem jest to, że klauzula WHERE podaje warunek dotyczący wyniku złączenia, a nie warunek dotyczący B.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Konwertuj wyniki SQL na tablicę PHP

  2. Czy powinienem używać backticków, czy nie, podczas ucieczki słów kluczowych w MySQL?

  3. Jak poprawnie zapętlić funkcję składowaną w MySQL?

  4. Dodanie tylko jednej wartości do tabeli w sql

  5. nie udało się otworzyć strumienia:Brak takiego pliku lub katalogu w