Die Ursache für den langsamen SELECT kann auch die WHERE-Bedingung:
WHERE EXTRACT(YEAR FROM B.HINABFLUGDATUM) = ....
sein.
Die Datenbank muss für die Tabelle Buchungen einen Full-Table-Scan ausführen.
(für jeden Datensatz EXTRACT ausführen)
Würde man das Feld HINABFLUGDATUM indizieren und die WHERE-Bedingung so schreiben:
WHERE B.HINABFLUGDATUM>=:datum1 AND B.HINABFLUGDATUM <:datum2
könnte
IB vom Index profitieren und ausserdem wäre die Abfrage viel flexibler.
Man könnte so z.B. alle Daten vom März 2004 abrufen.
Ich würde die Behauptung "Abfrage in Delphi langsam, aber in
IB Console schnell" nur dann trauen,
wenn am Ende von GetSQL steht:
Clipboard.AsText := Result;
und dann wirklich in der
IB-Console mit Paste & Ausführen gearbeitet wird.