2013-02-20 23 views
10

Aşağıdaki sorguyu aldığımı varsayalım. Eğer t1 ve t2'ye katılırken hiç eşleşme yoksa, MySQL tarafından göz ardı edilen diğer tüm katılımcılar mı?SQL JOIN'leri performans nedenleriyle belirli bir sırada mı yerleştirilmelidir?

Sorduğumun nedeni, eğer değilse, sorguyu kırarım ve PHP'yi birlikte parçalamak için kullanacağım. Performans isabeti yoksa, JOIN'leri bir önceki JOIN'in yapmadığı bir zamana kadar devam etmeyecek bir sıraya koyacağım. Teşekkürler

SELECT whatever 
FROM t1 
INNER JOIN t2 ON t2.t1id=t1.id 
INNER JOIN t3 ON t3.t2id=t2.id 
INNER JOIN t4 ON t4.t3id=t3.id 
INNER JOIN t5 ON t5.t4id=t4.id 
INNER JOIN t6 ON t6.t5id=t5.id 
INNER JOIN t7 ON t7.t6id=t6.id 
INNER JOIN t8 ON t8.t7id=t7.id 
INNER JOIN t9 ON t9.t8id=t8.id 
WHERE t1.c=123 AND t4.c=321 AND t6.c=222 AND t9.c=222 
+0

Yaptığım gibi bu yoldan geçen herkese başvurmak için ... http://stackoverflow.com/questions/1018822/inner-join-on-vs-where-clause bir çok ayrıntı sağlar. farklılıklar ve faydalar. – JeopardyTempest

cevap

14

MySQL için documentation "Birleştirici, tabloların birleştirileceği sırayı hesaplar".

Bu sıralama, tabloların boyutları ve dizinlerin varlığı gibi diğer faktörler hakkında bilgi temel alınarak belirlenir.

Bağlantıları, sorguyu okumak ve sürdürmek için en mantıklı olan sıraya koymalısınız.

+0

Teşekkürler Gordon. Bu yüzden MySQL'in benim için yapacağından beri hangi sırayı "Ben" koyduğunun önemi yok. MySQL'in onları listelediğimden farklı bir sıraya koyabilecekleri bir şans var mı? – user1032531

+2

MySQL tüm katılımları gerçekleştirecek. Diğer tablolardaki id sütunlarında dizinler varsa, motor dizini kullanır ve performans bir sorun olmamalıdır. –

+1

Dökümantasyon için teşekkürler! – Sonny

1

Tahminimce, bir performans vuruşu olmayacak. Sorgu eniyileyici, t2 ve t1 arasındaki birleşimin geçersiz olduğunu ve tüm bağımlılık birleştirmelerini sabit bir değere çözeceklerini belirlemelidir; bu, değerlendirilmeyeceği anlamına gelir.

+0

Teşekkürler Steve. Benim tahminim seninkiyle aynı. Ne kadar emin olduğunu düşünüyorsun? – user1032531

İlgili konular