Forum: Datenbanken
Delphi
by Gruber_Hans_12345,
29. Nov 2016
Ja stimmt
Für die zeiten führe ich immer zuerst 1-2 mal die Abfrage aus ohne zu messen und dann nehme ich das mittel aus 3-5 abfragen damit ich Last die durch andere verursacht werden nicht so sehr ins Gewicht fallen.
Aber schön das ich endlich mal ein Beispiel finde (aus der Praxis), wo ein Index (der zwar für andere Sachen wichtig ist) so richtig kontraproduktiv ist.
Forum: Datenbanken
Delphi
by Gruber_Hans_12345,
29. Nov 2016
Ohhh tatsächlich
mit dem ORDER BY dauert es nun statt 4,0 sekunden 1,2 sekunden !!!!!
Wobei das ganze nun für mich irgendwie noch schräger wird!
Also ohne dem ORDER BY bekomme ich als Plan nun "PLAN (BUCHUNGEN_DATUM ORDER BUCHUNGEN_USERID)" verwendet den Index.
mit ORDER BY USERID DESC : "PLAN SORT ((BUCHUNGEN_DATUM NATURAL))" - da ich ja keinen DESC Index für USERID habe aber das ganze...
Forum: Datenbanken
Delphi
by Gruber_Hans_12345,
28. Nov 2016
ja stimmt schon
nur habe ich auch ähnliche Anwendungsfälle, wo ich dann unterschiedliche Buchungen pro User haben möchten
zB.: generelle die letzte hinzugefügte Buchung
oder die jüngste Buchung (ID und das Datum müssen nicht übereinstimmen - sprich ich kann jetzt eine Buchung mit einem alten Datum erzeugen) - und je nach Situation ist einmal diese Buchung und einmal die andere Buchung als...
Forum: Datenbanken
Delphi
by Gruber_Hans_12345,
28. Nov 2016
das stimmt schon direkt nicht aber indirekt, es wird halt zyklisch der status der 800 user geladen, und diese dann gruppiert auf abteilungen dargestellt, wobei man mit incrementalsearch dann sehr schnell zum status des einzelnen users kommen kann.
Da ja auch paar andere infos geladen werden.
Kann man sicher auch besser machen und anders optimieren, aber eben der extremst große und bis jetzt...
Forum: Datenbanken
Delphi
by Gruber_Hans_12345,
25. Nov 2016
Ah okey danke :D
Das Problem ist, es wird teils relativ oft ausgeführt also jede Minute sowas ...
Ich werde es in diesem Fall dann zu dem jeweiligen User die letzte ID speichern, dann gehts natürlich extrem schnell.
Im Moment verwenden wir noch den 2.5 Firebird einmal als Classic und als SuperServer, aber es tut sich natürlich nicht so viel.
Forum: Datenbanken
Delphi
by Gruber_Hans_12345,
25. Nov 2016
Ja korrekt ich habe eine Tabelle mit 800.000 Buchungen und will nun zu jedem User (sind 800) die letzte Buchung erfahren.
DISTINCTROW kannte ich gar nicht und weiss auch nicht wie ich das unter firebird verwende ... den eine SELECT DISTINCTROW mag er nicht, da sagt er er kenne das Feld DISTINCTROW nicht.
und beim DISTINCT Weiss ich nicht wie mir der helfen sollte
da bekomme ich gerade mal...
Forum: Datenbanken
Delphi
by Gruber_Hans_12345,
24. Nov 2016
ja ich meinte ja, wenn ich im where ein userid < 20 mache, dann gehts schnell, weil auch weniger Datensätze kommen
wenn ich ein USERID > 0 mach oder > 10 (dann dauerts halt statt 4 sekunden 3.9 sekunden oder so)
und für das Datum habe ich ja einen DESC index, deswegen geht das reine SELECT MAX(DATUM) ohne gruppieren ja auch sehr sehr schnell... nur eben nicht mehr sobald ich nach dem feld...
Forum: Datenbanken
Delphi
by Gruber_Hans_12345,
24. Nov 2016
Also der Index über beide Felder bringt leider auch nichts (hatte ich auch schon vorher drinnen sowohl ASC als auch DESC)
das having bringt leider auch nichts, nur ein where würde was bringen, wenn ich dadurch die Datenmenge verringere, aber wenn ich alle user brauche, dann hilft es nichts mehr
Forum: Datenbanken
Delphi
by Gruber_Hans_12345,
24. Nov 2016
ja da gibt es auch einen Index (bzw zwei - einen ASC und einen DESC)
das sieht man wenn ich folgendes ausführe
SELECT MAX(DATUM) FROM BUCHUNGEN
das geht in 1ms und verwendet folgenden Plan
nur eben sobald ich das kombiniere und gruppiere dann siehts nicht mehr so toll aus
Forum: Datenbanken
Delphi
by Gruber_Hans_12345,
24. Nov 2016
PLAN (BUCHUNGEN ORDER BUCHUNGEN_USERID)
wobei BUCHUNGEN_USERID der Index ist.
mehr steht da nicht