Hi,
<br>
<br>Betreff:
<br>Select Abfrage mit vielen Tabellen (ca. 7) und zwei Views untereinander mit outer Joins verknüpft. Die Select Abfrage wird im Programm dynamisch erstellt und die Bedingungen in der Where Klausel dynamisch spezifiziert. Aus dem Grund sollte die Abfrage nicht von der folgenden Form abweichen:
<br>Select ... From ... Where... Group By...
<br>
<br>Diese Abfrage dauert viel zu lange.
Festmachen kann man das ganze an einer Tabelle und einer View.
<br>Bsp.:
<br>So soll es sein, dauert jedoch sehr lange.
<br>Select T.ID1 From
<br>T, V
<br>Where
<br>T.ID1 = V.ID1 (+)
<br>and T.ID2 = V.ID2 (+)
<br>and V.ID1 = 4711
<br>
<br>So geht es sehr schnell.
<br>Select T.ID1 From
<br>T, V
<br>Where
<br>T.ID1 = V.ID1
<br>and T.ID2 = V.ID2
<br>and V.ID1 = 4711
<br>
<br>In der View wird über ein Union auch auf die Tabelle T zugegriffen (wenn man das erste Select verwendet wird dann immer ein Access Full Tabel gemacht).
<br>Die Tabelle T und und eine andere Tabelle in der View bestitzen ca. 100000 Datensätze, was aber für einen richtigen Server ja keine Hürde darstellen sollte.
<br>
<br>Was mich ein wenig stört, ist das Oracle bei dem ersten Select Statement anscheinend zu erst den Join über alle Daten macht, und erst dann die Filter einsetzt. Es wäre viel intelegenter, zu erst mal alle Kriterien zu berücksichtigen und danach den outer join zu machen.
<br>Wie kann ich z.B. Oracle dazu bringen zu nächst mal die einzelnen Datenmengen zu filtern und das die Ergebnisse, die nur noch sehr gering sind (100 datensätze, wenn es doch mehr sind, kann man immer noch die schlechtere Perfomance mit der zu berücksichtigen Datenmenge argumentieren werden, aber nicht wenn die Rückgabe nur zwei drei Datensätze sind), zu joinen?
<br>Gibt es gute Bücher zu diesem Thema?
<br>Wer kann mir direkt weiterhelfen?
<br>
<br>Danke!
<br>
<br>mfg
<br>PS
<br>
<br>Betreff:
<br>Select Abfrage mit vielen Tabellen (ca. 7) und zwei Views untereinander mit outer Joins verknüpft. Die Select Abfrage wird im Programm dynamisch erstellt und die Bedingungen in der Where Klausel dynamisch spezifiziert. Aus dem Grund sollte die Abfrage nicht von der folgenden Form abweichen:
<br>Select ... From ... Where... Group By...
<br>
<br>Diese Abfrage dauert viel zu lange.
Festmachen kann man das ganze an einer Tabelle und einer View.
<br>Bsp.:
<br>So soll es sein, dauert jedoch sehr lange.
<br>Select T.ID1 From
<br>T, V
<br>Where
<br>T.ID1 = V.ID1 (+)
<br>and T.ID2 = V.ID2 (+)
<br>and V.ID1 = 4711
<br>
<br>So geht es sehr schnell.
<br>Select T.ID1 From
<br>T, V
<br>Where
<br>T.ID1 = V.ID1
<br>and T.ID2 = V.ID2
<br>and V.ID1 = 4711
<br>
<br>In der View wird über ein Union auch auf die Tabelle T zugegriffen (wenn man das erste Select verwendet wird dann immer ein Access Full Tabel gemacht).
<br>Die Tabelle T und und eine andere Tabelle in der View bestitzen ca. 100000 Datensätze, was aber für einen richtigen Server ja keine Hürde darstellen sollte.
<br>
<br>Was mich ein wenig stört, ist das Oracle bei dem ersten Select Statement anscheinend zu erst den Join über alle Daten macht, und erst dann die Filter einsetzt. Es wäre viel intelegenter, zu erst mal alle Kriterien zu berücksichtigen und danach den outer join zu machen.
<br>Wie kann ich z.B. Oracle dazu bringen zu nächst mal die einzelnen Datenmengen zu filtern und das die Ergebnisse, die nur noch sehr gering sind (100 datensätze, wenn es doch mehr sind, kann man immer noch die schlechtere Perfomance mit der zu berücksichtigen Datenmenge argumentieren werden, aber nicht wenn die Rückgabe nur zwei drei Datensätze sind), zu joinen?
<br>Gibt es gute Bücher zu diesem Thema?
<br>Wer kann mir direkt weiterhelfen?
<br>
<br>Danke!
<br>
<br>mfg
<br>PS
Comment