Einzelnen Beitrag anzeigen

mlc42

Registriert seit: 9. Feb 2013
123 Beiträge
 
#1

Firebird SELECT BETWEEN etxrem langsam

  Alt 9. Feb 2013, 13:33
Datenbank: Firebird • Version: 2.52 • Zugriff über: FlameRobin,AnyDAC
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
  Mit Zitat antworten Zitat