(Bu sizin niyetiniz gibi görünüyor) INNER JOIN
yerine kullandığınızı düşünürsek LEFT JOIN
, bu iki sorgu işlevsel olarak eşdeğerdir. Sorgu optimize ediciler, en etkili yürütme planına ulaşmak için WHERE
, FROM
yan tümcenizdeki ve yan tümcenizdeki ölçütleri inceleyecek ve değerlendirecek ve sorgu planları oluştururken tüm bu faktörleri göz önünde bulunduracaktır. Her EXPLAIN
iki ifadede de bir açıklama yaparsak, aynı sonucu alırız:
Sorgu 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
[Sonuçlar] :
| 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 |
Sorgu 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
[Sonuçlar] :
| 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 |
Aşağıdaki bağlantılarla tüm ayrıntıları inceleyebilirsiniz. İki motorun nasıl çalıştığını da karşılaştırabilmeniz için bir SQL 2008 örneği oluşturdum (aynı):
MySQL sorgu örneği
SQL 2008 sorgu örneği (Her iki sonuç için de 'Yürütme Planını Görüntüle' olduğunuzdan emin olun)
INNER JOIN
, amaLEFT JOIN
bu farklı sonuçlar getirecektir. Temel olarak,WHERE
ikinci sorgunuza eklediğiniz koşullarJOIN
, birINNER JOIN