Was ich mich immer wieder Frage ist, wie läuft ein JOIN genau ab, welche Tabellen werden zuerst gelesen, welches WHERE in welcher Reihenfolge ausgeführt? Bestimmt die Reihenfolge der Tabellen die Ausführung? Wie hängt die Indexfindung damit zusammen?
Vermutlich ist es DB-bezogen, trotzdem haben sie sicher ähnliche Regeln, hat das mal jemand erforscht bzw. kann eine gute Doku dazu nennen?
Das entscheidet im wesentlichen alles der Datenbankoptimierer. Dementsprechend hängt das auch davon ab, welche Datenbank Du verwendest. Die Datenbank-Engines haben sehr ausgefuchste Algorithmen, um zu entscheiden, womit sie anfangen sollen, und meist ist man gut beraten, sich ihnen anzuvertrauen. Je nach Datenbank kann man aber beim SELECT sog. Datenbank-Hints mitgeben, die die Arbeitsweise des Optimierers beeinflussen. Bei Oracle gibt es beispielsweise einen Datenbank-Hint, mit dem man der Datenbank sagen kann, mit welcher der gejointen Tabellen sie anfangen soll zu lesen.
Datenbank-Hints mitzugeben ist in der Syntax des SELECT-Befehls in ABAP möglich (siehe dessen F1-Hilfe), auch wenn es im Regelfall nicht empfohlen wird. Der Hint wird freilich wirkungslos, wenn man das Programm auf einer anderen Datenbank ausführt (aber immerhin bekommt man dann keinen Fehler, sondern der Hint wird einfach ignoriert.)
Folgende Benutzer bedankten sich beim Autor DeathAndPain für den Beitrag: deejey