Zitat von
Jens Schumann:
Hat schon jemand gehört, dass der Firebird Probleme mit einem Left Join hat?
[EDIT] Ob ich LEFT JOIN oder LEFT OUTER JOIN schreibe macht keinen Unterschied[/EDIT]
Jupp, hatte ich.
Das Problem ist wohl, dass der rudimentäre Optimizer von
FB oder
IB keine nested loops kennt und sortierte Indizes nicht mit in den
Query plan berücksichtigt.
Beispiel:
Du vergleichst X.A mit Y.B und auf beiden liegt ein sortierter Index. Die Datenbank hätte somit sehr einfach die Möglichkeit sämtliche Wertekombinationen nur einmal vergleichen zu müssen (wofür liegen die Indizes wohl sonst sortiert vor?
), Firebird interessiert das nicht die Bohne. Der wird sich fleißig einen Wolf rödeln und immer alles mit jedem vergleichen...
Besonders krass zeigt sich der Mangel bei sowas:
SQL-Code:
SELECT X
FROM Y
WHERE Z in (SELECT A
FROM B
WHRE C = :C)
Firebird wird die sub
query FÜR JEDEN DATENSATZ ausführen.
Ich kenne kein anderes ernsthaftes
DBMS, dass sich sowas erlaubt.