2012-04-04 8 views
0

Mögliche Duplizieren:
Explicit vs implicit SQL joins
In MySQL queries, why use join instead of where?Was ist der Unterschied mit beitreten Stichwort verbinden oder mit beitreten =

Abfrage mit Operator =: -

Select us.FirstName 
     ,uf.FileTitle 
     ,pq.Question 
     ,pa.Answer from 
UserMst us,UploadedFile uf,PollQuestion pq,PollAnswer pa,PollResult pr 
where us.UserId = pr.U_id 
     and uf.FileId=pr.A_id 
     and pq.Q_id=pr.Q_id 
     and pa.A_id=pr.ans_id 

Abfrage mit Join Schlüsselwort: -

Select us.FirstName,uf.FileTitle ,pq.Question,pa.Answer from 
    PollResult pr join UserMst us on us.UserId = pr.U_id 
      join UploadedFile uf on uf.FileId = pr.A_id 
      join PollQuestion pq on pq.Q_id= pr.Q_id 
      join PollAnswer pa on pa.A_id =pr.ans_id 

Welche ist besser in der Ausführung?

+0

Oder [INNER JOIN ON vs WHERE-Klausel] (http://stackoverflow.com/questions/1018822/inner-join-on-vs-where-klause) – bhamby

+0

implizite Joins Bereich SQL antipattern siehe: http: //www.amazon.com/gp/product/1934356557/ref=kinw_rke_tl_1 – HLGEM

Antwort

1

In SQL 2008 wird es fast keinen Unterschied machen. (Obwohl ich denke, dass die frühere Methode veraltet sein könnte?)

In vielen SQL-Implementierungen jedoch, wenn jeder Join eine Bedingung hat, wird der nachfolgende Join mit weniger Werten verbunden und daher etwas schneller.

Wenn Sie alle Ihre Bedingungen am Ende setzen, wird diese Optimierung nicht bis zum Ende auftreten. Und so werden Sie mit einer riesigen Liste von Zeilen enden, die in einem Schritt gefiltert werden, was in der Theorie langsamer sein wird.

So zum Beispiel:

Wenn die Tabelle A hat 1000 Zeilen und Sie sich an einem anderen Tisch, B, mit 1000 Zeilen, aber angeben int eh Join-Bedingung, die Sie nur auf 10 der Zeilen in B beitreten , Sie haben 10 Reihen. Wenn Sie sich dann der Tabelle C anschließen, werden Sie nur 10 Zeilen lang sein.

Wenn Sie A nach B nach C dann filtern Sie Mitglied, Sie 1000 Zeilen sind Filterung (Oder vielleicht eine Million auf der Join abhängig)

Also im Interesse der Quer Umsetzung Kompatibilität und auch die Lesbarkeit, kann es am besten sein, um die letztere Version zu verwenden.

0

Ich bevorzuge die Verbindung Ich denke, es macht am meisten Sinn, immer die Join-Bedingung in die ON-Klausel setzen (es sei denn, es ist eine äußere Join und Sie wollen es tatsächlich in der Where-Klausel) macht es jedem, der Ihre Abfrage liest, klarer, an welche Bedingungen die Tabellen angefügt werden, und verhindert auch, dass die WHERE-Klausel dutzende von Zeilen lang ist. weil es sauber ist