Jeśli uznamy, że używasz INNER JOINzamiast LEFT JOIN(co wydaje się twoim zamiarem), te dwa zapytania są funkcjonalnie równoważne. Optymalizatory zapytań sprawdzą i ocenią kryteria zawarte w WHEREklauzuli i FROMklauzuli oraz wezmą pod uwagę wszystkie te czynniki przy tworzeniu planów zapytań w celu osiągnięcia najbardziej wydajnego planu wykonania. Jeśli zrobimy EXPLAINna obu instrukcjach, otrzymamy ten sam wynik:
Zapytanie 1 :
EXPLAIN
SELECT
tableA.ColA
,tableA.ColB
,tableA.ColC
,tableA.ColD
,tableA.ColE
FROM tableA
JOIN tableB ON tableA.ColA=tableB.ColA
WHERE
tableA.ColB=tableB.ColB
AND tableA.ColC=tableB.ColC
AND tableA.ColD=tableB.ColD
AND tableA.ColE=tableB.ColE
[Wyniki] :
| ID | SELECT_TYPE | TABLE | TYPE | POSSIBLE_KEYS | KEY | KEY_LEN | REF | ROWS | EXTRA |
------------------------------------------------------------------------------------------------------------------------
| 1 | SIMPLE | tableA | ALL | (null) | (null) | (null) | (null) | 1 | |
| 1 | SIMPLE | tableB | ALL | (null) | (null) | (null) | (null) | 1 | Using where; Using join buffer |
Zapytanie 2 :
EXPLAIN
SELECT
tableA.ColA
,tableA.ColB
,tableA.ColC
,tableA.ColD
,tableA.ColE
FROM tableA
JOIN tableB ON tableA.ColA=tableB.ColA
AND tableA.ColB=tableB.ColB
AND tableA.ColC=tableB.ColC
AND tableA.ColD=tableB.ColD
WHERE
tableA.ColE=tableB.ColE
[Wyniki] :
| ID | SELECT_TYPE | TABLE | TYPE | POSSIBLE_KEYS | KEY | KEY_LEN | REF | ROWS | EXTRA |
------------------------------------------------------------------------------------------------------------------------
| 1 | SIMPLE | tableA | ALL | (null) | (null) | (null) | (null) | 1 | |
| 1 | SIMPLE | tableB | ALL | (null) | (null) | (null) | (null) | 1 | Using where; Using join buffer |
Możesz przejrzeć pełne informacje za pomocą poniższych linków. Stworzyłem również przykład SQL 2008, abyś mógł porównać działanie dwóch silników (co jest takie samo):
Przykład zapytania MySQL
Przykład zapytania w SQL 2008 (upewnij się, że „wyświetlasz plan wykonania” dla obu wyników)
INNER JOIN, ale zLEFT JOINtym zwróci inne wyniki. Zasadniczo, warunki, które zostały dodane naWHEREna drugim zapytaniu są konwersjaJOINna zasadzieINNER JOIN