Hallo liebe Leute,
ich habe ein Problem mit einem Select auf einem Interbase - Server mit meinem Delphi Programm.
Hier der
SQL (vereinfacht)
SQL-Code:
Select Tabelle1.*
From Tabelle1
Left Outer Join Tabelle2 on Tabelle1.ID1 = Tabelle2.ID2
Left Outer Join Tabelle3 on Tabelle2.ID4 = Tabelle3.ID3
Where Tabelle1.Bezeichnung = 'test'
and Tabelle3.Farbe = 'rot'
In der Tabelle3 sind einige Datensätze welche als Farbe rot haben.
Es ist ein Index auf ID1,ID2,ID3,ID4,Bezeichnung,Farbe. Nun haben sich die Datensätze der Tabelle1 (ca. 24.000) und Tabelle3 (ca 75.000) verdreifacht. Ich benutze die IBX Komponenten. Als Anzeige wird ein Grid benutzt und ein TIBDataSet um an die Daten zu kommen. Wenn ich es ohne den Join mache geht es recht zügig, jeodch mit dem Join dauert es um einiges länger als vorher auch dann wenn als Ergebnis eine kleine Anzahl von Datensätzen angezeit wird. Ich dachte die Anzahl der Datensätze ist egal, wenn das Ergebnis das selbe ist.
Um mir da ganze mal genauer anzusehen habe ich mir den
SQL kopiert und der IBConsole ausgeführt. Dort geht es eigentlich sehr zügig. < 10 sec. je nach Werten. In meinem Programm dauert es ca 1 Minute bis ein Ergebnis kommt.
Hat jemand einen Tip für mich ? Ich habe den Left Outer Join schon mal durch ein in getauscht. Das war auch nicht besser.
Wieso ist die IBConsole schneller als mein Prohgramm ?
Danke Tanja