AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Index setzen?

Ein Thema von Gruber_Hans_12345 · begonnen am 24. Nov 2016 · letzter Beitrag vom 29. Nov 2016
Antwort Antwort
Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.441 Beiträge
 
Delphi 2007 Professional
 
#1

AW: Index setzen?

  Alt 24. Nov 2016, 10:31
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
Gruss Hans

2B or not 2B, that is FF
  Mit Zitat antworten Zitat
bra

Registriert seit: 20. Jan 2015
711 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#2

AW: Index setzen?

  Alt 24. Nov 2016, 10:58
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
Es geht nicht darum die Datenmenge zu verringern, sondern mit der where-Klausel den Index zu erzwingen. Das ist ein Problem von Firebird. Es gibt sicher eine Abfrage, die immer alles zurückliefert (z.B. userid > -1, wenn die nicht negativ sein können).
Siehe auch hier: http://www.firebirdfaq.org/faq205/ oder hier: https://sourceforge.net/p/firebird/m...ssage/1300057/
oder hier: http://www.delphipraxis.net/180221-f...index-max.html
  Mit Zitat antworten Zitat
Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.441 Beiträge
 
Delphi 2007 Professional
 
#3

AW: Index setzen?

  Alt 24. Nov 2016, 11:15
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 gruppiere ...
Gruss Hans

2B or not 2B, that is FF
  Mit Zitat antworten Zitat
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Index setzen?

  Alt 24. Nov 2016, 16:13
Vielleicht wärs hilfreich, wenn du etwas mehr über den Kontext sagst.

Aus der Abfrage heraus schließe ich mal, das du für jeden User (userid) das Datum der letzen
Buchung haben willst oder ?

Das würde u.U. ein DISTINCT oder DISTINCTROW helfen (Bin nicht wirklich firm mit Firebird).
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.441 Beiträge
 
Delphi 2007 Professional
 
#5

AW: Index setzen?

  Alt 25. Nov 2016, 06:48
Vielleicht wärs hilfreich, wenn du etwas mehr über den Kontext sagst.

Aus der Abfrage heraus schließe ich mal, das du für jeden User (userid) das Datum der letzen
Buchung haben willst oder ?

Das würde u.U. ein DISTINCT oder DISTINCTROW helfen (Bin nicht wirklich firm mit Firebird).
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 alle USer raus die irgendwann mal gebucht haben (Aber ja nicht die letze)
Gruss Hans

2B or not 2B, that is FF
  Mit Zitat antworten Zitat
tsteinmaurer

Registriert seit: 8. Sep 2008
Ort: Linz, Österreich
530 Beiträge
 
#6

AW: Index setzen?

  Alt 25. Nov 2016, 07:36
Firebird kann keinen DESCENDING Index für ein GROUP BY verwenden:
http://tracker.firebirdsql.org/browse/CORE-4529

In einem lokalen Test hier mit 800.000 Datensätzen und unterschiedlichen Index-Kombinationen war der Full-Table Scan für deine Abfrage immer schneller, d.h. solange ein Index nicht für die Einschränkung der Ergebnismenge verwendet werden kann (fehlende WHERE Klausel), bremst er dich potentiell sogar aus, da das ein zusätzlicher "Hop" darstellt, bis er zum Datensatz (über den Indexeintrag) kommt.

D.h. ich würde eher in Richtung Firebird-Tuning/Konfiguration gehen und ihm mehr RAM geben. Z.B.:
  • Größer PageCache
  • Bzw. auch (wird sehr gerne auch vergessen!) dem Bereich für temporäre Sachen mehr RAM spendieren. Siehe TempCacheLimit in firebird.conf

Welche Firebird-Architektur verwendest du bzw. wie oft wird dieses Statement eigentlich ausgeführt?

LG
  Mit Zitat antworten Zitat
Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.441 Beiträge
 
Delphi 2007 Professional
 
#7

AW: Index setzen?

  Alt 25. Nov 2016, 08:10
Firebird kann keinen DESCENDING Index für ein GROUP BY verwenden:
http://tracker.firebirdsql.org/browse/CORE-4529

In einem lokalen Test hier mit 800.000 Datensätzen und unterschiedlichen Index-Kombinationen war der Full-Table Scan für deine Abfrage immer schneller, d.h. solange ein Index nicht für die Einschränkung der Ergebnismenge verwendet werden kann (fehlende WHERE Klausel), bremst er dich potentiell sogar aus, da das ein zusätzlicher "Hop" darstellt, bis er zum Datensatz (über den Indexeintrag) kommt.

D.h. ich würde eher in Richtung Firebird-Tuning/Konfiguration gehen und ihm mehr RAM geben. Z.B.:
  • Größer PageCache
  • Bzw. auch (wird sehr gerne auch vergessen!) dem Bereich für temporäre Sachen mehr RAM spendieren. Siehe TempCacheLimit in firebird.conf

Welche Firebird-Architektur verwendest du bzw. wie oft wird dieses Statement eigentlich ausgeführt?

LG
Ah okey danke

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.
Gruss Hans

2B or not 2B, that is FF
  Mit Zitat antworten Zitat
Benutzerbild von NicoDE
NicoDE

Registriert seit: 16. Jul 2012
Ort: Darmstadt
26 Beiträge
 
Delphi 10.3 Rio
 
#8

AW: Index setzen?

  Alt 28. Nov 2016, 13:53
Firebird kann keinen DESCENDING Index für ein GROUP BY verwenden:
http://tracker.firebirdsql.org/browse/CORE-4529
Es fehlt ein "ORDER BY x DESC", um den Index zu verwenden.
Nico Bendlin
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:10 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz