SOL JOIN veya sadece ek tablolar seçin?

Açıkça LEFT JOIN demenin arasındaki hız hakkında merak ediyorum ve sonra da değerlerini birbirine birleştiriyorum. İşte burada:

SELECT example.id FROM example
LEFT JOIN finals ON example.id = finals.account_id";

vs.

SELECT example.id, finals.account_id
FROM example, finals
WHERE example.id = finals.account_id

İlkinin daha hızlı olduğundan neredeyse eminim, ama bunu önermek için bir cevap bulamıyorum. (Aslında ikincisini ne arayacağımı bile bilmiyorum, sadece yumuşak birleşim olarak adlandırıyorum)

0
Oof, benim hatam.
katma yazar Vael Victus, kaynak
Yinelenen veya benzer bir soru: stackoverflow.com/questions/894490/…
katma yazar jli, kaynak

4 cevap

Ikinci bir INNER JOIN (varsayılan) ve çıktıdan daha az bir hız sorusudur - bir iç birleşim yalnızca belirtilen alanın her iki tabloda da bulunduğu yere dönecektir.

örneğin example 3 no'lu bir kayıt olsaydı, ancak finals 'i 3'lük bir account_id ile kaydederse, her iki kayıt da gösterilmeyecekti.

Bir LEFT JOIN , finals eşleşmesinin olmadığı yerlerde bile example listesindeki kayıtları listeler - Eksik alanlar NULL olarak ayarlanır

2
katma

Bu sorgular arasında bir sematic farkı var.

İlk katılım, sol tablodaki tüm satırları içeren bir OUTER JOIN'dir. İkincisi bir INNER JOIN'dir ve maçın başarısız olduğu satırları içermez.

LEFT JOIN yerine JOIN yazmış olsaydınız, iki sözdizimi aynı olurdu, ancak ilk sözdizimi okunabilirlik ve sürdürülebilirlik için tercih edilir.

Aslında, ikincisini 'ne' arayacağımı bile bilmiyorum, sadece yumuşak birleşim olarak adlandırıyorum.

İkinci sözdizimi, MySQL'in "virgül operatörü" olarak adlandırdığı şeyi kullanır. Bazen örtülü birleştirme olarak adlandırılır. Ayrıca ANSI-89 birleştirmesi olarak da adlandırılır.

2
katma

İkisinin hızını gerçekten kıyaslayamazsınız çünkü farklı sonuçlar verirler. İkinci sorgu, her iki tabloda da bir giriş gerektirir. İlk sorgu sadece ilk tabloda bir giriş gerektirir.

İkinci sorgu bir CROSS JOIN kullanıyor (mysql içinde JOIN'den fark yok .. virgül, hiçbir ON yan tümcesi olmayan JOIN için bir takma addır).

0
katma

Bu ikinci örnek bir INNER JOIN yapar ve potansiyel olarak farklı sonuçlar verir.

0
katma