Lucky83 hat folgendes geschrieben : |
Hallo,
ich greife über eine clientDataSet, die mit einer SQLConnection (..SQLDataSet, Provider..) verbunden ist auf eine Datenbank (Firebird) zu. In einer Tabelle befinden sich so ca 5.000 Datensätze und die clientDataSet braucht ewig bis sie die Daten läd bzw. die Tabelle öffnet Wenn ich vergleichsweise den selben SQL-Befehl im Explorer abschicke geht es um einiges schneller.
In der Datenbank hab ich natürlich auch Indices gesetzt und die SQL-Befehle haben alle eine "where" Bedingung.
Einstellungen:
Bei der SQLDataSet hab ich GetMetaData auf "false" gesetz.
Hat jemand eine Ahnung an was das legen könnte? |
Der Eintrag ist zwar schon uralt, aber vielleicht besteht ja gerade deswegen eine Chance, dass Lösungen vorhanden sind.
Ich habe nämlich ein ähnliches Problem, und vielleicht hat es auch denselben Grund.
Ich verwende Turbo Delphi Explorer mit Firebird 2.1.
Es schaut so aus, als wäre es völlig ohne Bedeutung, ob man in einer Datenbank Indizes definiert oder nicht, die ClientDataSet-Komponente kennt diese Indizes einfach nicht.
Und es scheint auch keinen Work-Around für dieses Problem zu geben.
Folge bei meinem Programm: Bei jedem Programmstart muss der aktuell verwendete Index wieder neu aufgebaut werden. Das gilt auch für einen Wechsel zu einem anderen Index.
Allerdings bleiben die Indizes zumindest während des Programmlaufs dann erhalten, zumindest, wenn man die IndexDefs verwendet.
Bei ca. 100000 Datensätzen macht sich dieses Verhalten schon ziemlich extrem bemerkbar.
Und es ist für mich völlig unverständlich, wieso ich einen ganz wesentlichen Teil der DB-internen Intelligenz nicht nutzen kann.
Ich nehme mal an, dass du aus einem ähnlichen Grund auf die Nase gefallen bist.
Es waren zwar Indizes in der DBdefiniert, diese wurden aber vom ClientDataSet nicht erkannt. Meine Vermutung: WHERE-Klauseln können keinen Indexnutzen und sind deswegen gnadenlos langsam.
Hat sonst noch irgendjemand Erfahrungen zu diesem Thema gesammelt?
Oder kennt jemand einen Trick, wie man diese Einschränkung umgeht?
Vielen Dank im voraus
Harald