ich habe eine Datenbank mit ca. 100000 Datensätzen und muß häufiger Begriffe in einem Feld suchen. Ich habe bisher mit Set Scope (verbleiben ca. bis zu 400 Datensätze) und dann mit set Filter gearbeitet. Das ging im Prinzip, aber bei ca. 2% der Suchevorgänge wurden im Netzwerk bis zu 40 Sekunden (Zeiten bis Daten auf Schirm sichtbar sind) gebraucht. Lange hat es gedauert bis ich dem Problem auf die Spur kam.
Code: Alles auswählen
* kennzeich C 6 Stellen
* gr1 C 2 Stellen
* gr2 C 2 Stellen
* gr3 C 2 Stellen
* bezeich C 50 Stellen
mkennzeich:="D-EIBN"
use lfzzeit
index on kennzeich TAG ("kennzeichen") to lfz_zken
index on kennzeich+ gr1 + gr2 + bezeich+ gr3 TAG ("lfzliste") to lfz_zlis
set order to ("lfzliste") // zusammengesetzt kennzeichen + gr1 + gr2 + bezeich + gr3
* set order to ("kennzeichen") // nicht zusammengesetzt kennzeichen
SET SCOPE TO mkennzeich // ist nur das Kennzeichen sichtbar
set filter to "100"$upper(bezeich) // Filterfunktion
* set filter to "FRI"$upper(bezeich) // Filterfunktion
** FRI dauert wesentlich länger bei zusammengesetztem Index
go top
browse()
Zusammengesetzer Index: Suche ich mit Set filter nach "100" so dauert das im Netzwerk 0,06 Sekunden, bei "FRI" (scheint ein Teil der 2% zu sein) ca. bis zu 20 Sekunden.
Index nur auf kennzeichen: In beiden Fällen nur ca. 0,06 Sekunden.
Der Aufbau vom browse() dauert dabei so lange. Beim Xbasepart xbpbrowse und refresh() das gleiche Problem.
Nun benötige ich aber für die Anzeige den zusammengesetzten Index auf jeden Fall. Aber selbst wenn ich eine Zeile vor dem Browse() auf den zusammengesetzten Index umschalte bleibt die lange Zeit.
Hat eine eine Idee wie ich die beiden Anforderungen unter einen Hut bekomme?
mfg
Wolfgang