Hi,
ein Kollege fragte mich, warum ein ein Statement auf einmal so lange dauernd würde. Hier mal ein schematisches Beispiel:
1 SELECT ID from A
2 LEFT OUTER JOIN B ON (B.ID = A.ID)
3 LEFT OUTER JOIN C ON (C.ID = B.ID)
4 LEFT OUTER JOIN D ON (D.ID = C.ID)
5 JOIN E ON (E.ID = D.ID)
6 JOIN F ON (F.ID = E.ID)
7 JOIN G ON (G.ID = A.ID)
Der Knackpunkt dabei war der Teil in Zeile 7. Lies man diesen weg oder verschob ihn direkt in die 2. Zeile lief alles schnell. Daraufhin schaute ich mir den Ausführungsplan und sah woran es lag. Der SQL führte als erstes die Statements 5+6 und 7 parallel
aus. Danach mischte er diese zusammen und da diese nicht miteinander verbunden sind, kam es zu einem Kreuzprodukt was zu einer riesen Menge an Daten führte, die dann in den LEFT OUTER JOINS verwendet wurden.
Meine Frage ist nun, warum der Optimizer die INNER JOINS zuerst verbindet, obwohl das zu einem Kreuzprodukt führt. Gibt es dazu einem speziellen Grund oder hat sich der Optimizer da vertüddelt!?
Gruß
Martin