Nehmen wir an, wir haben eine Verbindung zwischen t1
und t2
, wie folgt aus:Ist ein "Ein" Kriterium schneller als ein "Wo"?
select c1, ..., cn
from t1 join t2
on t1.fk = t2.k
join t3
on t2.fk = t3.k
where (some condition independent from t3)
wo (some condition independent from t3)
alles sein könnte. Betrachten Sie nun diese Abfrage:
select c1, ..., cn
from t1 join t2
on t1.fk = t2.k and (some condition independent from t3)
join t3
on t2.fk = t3.k
lassen Sie uns annehmen, dass t1
x t2
x t3
zusammen mit den join
Bedingungen führt in count1 Reihen, während, wenn wir auch durch die where
Bedingung filtern, dann werden wir count2 Datensätze haben, wo count2 < = count1.
Ich frage mich, ob die where
Bedingung für alle count1 Zeilen ausgeführt wird, oder nur auf die Teilmenge der count2 Zeilen? Ist es in Bezug auf die Leistung besser, die Bedingungen so schnell wie möglich in die On-Bedingungen aufzunehmen oder sie am Ende der Abfrage anzuhängen?
Sie sollten gleich sein. Der SQL-Optimierer sucht nur nach Filterbedingungen, nicht nach deren Definition. Hinweis: Bei äußeren Joins kann die Semantik je nach den Bedingungen unterschiedlich sein. –