Einzelnen Beitrag anzeigen

Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.426 Beiträge
 
Delphi 2007 Professional
 
#9

Re: ORDER in Unterselect sehr langsam

  Alt 13. Okt 2009, 14:34
Zitat von hoika:
Hallo,


Zitat:
gibt es irgendwoi eine doku, wann FB für einen ORDER einen Index verwendet und wann nicht?!?!?
Das entscheidet der Optimizer bei jeder Query separat.


SQL-Code:
SELECT P.ID, (SELECT FIRST 1 TB.AUFTRAGID FROM TERMINAL_BUCHUNGEN TB WHERE TB.PERSONALID = P.ID ORDER BY TB.BUCHUNG DESC) AS AUFTRAGID
FROM PERSONAL P
Was willst du denn eigentlich erreichen ?

Hast du auf TERMINAL_BUCHUNGEN.BUCHUNG auch einen DESC Index ?
Ein normaler (ASC) reicht nicht.

Ich würde das SubSelect eh weglassen.
Wie du richtig festgestellt hast, at FB du schon noch Probleme.

Mach es doch etwa so

SQL-Code:
Select Max(TB.BUCHUNG) AS AUFTRAGID, PersonalId
From FROM TERMINAL_BUCHUNGEN
Group By PersonalId
Grouping ist meine grosse Schwäche
Ob dann noch ein Desc Index auf TERMINAL_BUCHUNGEN.BUCHUNG notwendig ist,
musst du ausprobieren.
Auf TERMINAL_BUCHUNGEN.PERSONALID sollte aber einer draufsein.


Heiko

Hallo also ich habe mittlerweile auf fast jedes Feld 2 Indexe einen ASC und einen DESC (zum testen)
Die tabelle hat ja auch mittlerweile schon über 8 Millionen einträge ...

Das Problem ist ja, eine normales Group bringt nicht die werte die ich brauche, da ich ja
den Wert AUFTRAGID aus der Tabelle TERMINAL_BUCHUNGEN brauche der am aktuellesten ist (sprich TB.BUCHUNG am ältesten)
(in der echt applikation sind noch ein paar WHERE dabei, aber die machen keinen Unterschied aus)

wenn eis ein
SELECT (TBAUFTRAGID BY MAX(TB.BUCHUNG)) oder so geben würde
sprich eine Aggreagatfunktion, die mir die Spalte AuftragID zurückliefert, von der Zeile, wo MAX(TB.BUCHUNG) das wäre ideal .... sowas kann ich meines erachtens nur mit so nem (SELECT FIRST 1 ... ) erreichen, ansonsten würde ich es auch in ein GROUP umbauen ...
Gruss Hans

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