Hallo,
ich habe ein seltsames Verhalten bei Firebird entdeckt. Abfragen mit BETWEEN sind teilweise unglaublich langsam.
Beispiel Tabelle mit einigen 100.000 Datensätzen Felder (ID,DATUM,NUMMER,....)
Sekundärer Index auf ID,DATUM,NUMMER ist gesetzt
SELECT * FROM tabelle WHERE (ID BETWEEN 1000 AND 1000) AND (DATUM BETWEEN '01.01.2013' AND '01.01.2013') ORDER BY ID,DATUM,NUMMER
Dieser
SQL dauert um die 9 Sekunden und liefert in meinen Daten ca. 8 Datensätze zurück.
Laut Plan nimmt Firebird den INDEX ID,DATUM,NUMMER. Die Platte hört sich aber so an als wenn er mehr macht. Flamerobin zeigt 70.000 Fetches an.
SELECT * FROM tabelle WHERE (ID = 1000) AND (DATUM = '01.01.2013') ORDER BY ID,DATUM,NUMMER (Was in diesem Fall geht da die Grenzen gleich sind)
Dieser
SQL dauert 0,09 Sekunden.
Festplatten Cache, Firebird Cache habe ich vor jedem Test geleert. Sonst merkt man das nicht.
Der gleiche
SQL wird in meinem Programm auch auf einen MS-
SQL Server abgesetzt. Da ist es immer sehr schnell.
Ich habe das bei mir so in ANYDAC geändert, das BETWEEN mit gleichen Grenzen durch = ersetzt wird. Dann funktioniert mein Programm auch auf Firebird
so schnell wie man das bei dieser einfachen Afrage erwarten sollte.
Kennt jemand die Ursache für dieses Verhalten ?
mfg
Martin