-
Forum: Datenbanken
Delphi
by Gruber_Hans_12345,
15. Okt 2009
ok, die von delphianer, läuft nun auch mit 200ms (wobei die 200ms und 60ms wahrscheinlich ca gleich sind .... )
Die Daten sind auch richtig, es werden mit dem INNER JOIN halt die NULL ausgeblendet.
Die Daten von webcss, sind aber definitiv falsch, da hier ja nur der MAX(AUFTRAGID) gelifert wird, und das ist ja nicht gewünscht
Übrigens ein sehr interessanter Ansatz das bei delphianer -...
-
Forum: Datenbanken
Delphi
by Gruber_Hans_12345,
15. Okt 2009
Ja gerne, also die "Sieger" Lösung bracuht für die Abfrage 60ms
Deine braucht 2.171 sekunden, allerdings liefert es auch falsche Auftragsdaten als ergebnis ....
-
Forum: Datenbanken
Delphi
by Gruber_Hans_12345,
15. Okt 2009
@webcss: Das würde nur den größten AuftragID leifern und nicht den AuftragID der in dem datensatz mit der größten BUCHUNG steht ....
ABER :
Die letzte Stored Procedure läuft nun sehr gut
Habs nun "auf gut Glück" ins Programm selbst eingebaut
und brauch nun statt den 3 sekunden keine 1.5 sekunden mehr sondern mit der neuen nur mehr 60 ms
-
Forum: Datenbanken
Delphi
by Gruber_Hans_12345,
15. Okt 2009
Doch aht es und ist auch der ID
meinst du wegen dem
PLAN (PERSONAL NATURAL)
?
Ich vermute mal das ist, weil ich die ganze PERSONAL Tabelle auslese, daher kann bzw brauche ich ja keinen Index in dem Fall oder?
-
Forum: Datenbanken
Delphi
by Gruber_Hans_12345,
15. Okt 2009
ja, der PLAN schon :
execute block
returns (ID INTEGER, MBID INTEGER)
as
declare variable ID1 INTEGER;
begin
for select ID FROM PERSONAL into :ID
DO begin
MBID = null;
SELECT FIRST 1 TB.AUFTRAGID FROM TERMINAL_BUCHUNGEN TB WHERE TB.PERSONALID = :ID INTO :mbid;
-
Forum: Datenbanken
Delphi
by Gruber_Hans_12345,
15. Okt 2009
verstehe nicht, was du meinst?
funktionieren tut es nun ja, nur in der Personal Edition gibt es leider keine PLAN oder PERFORMANCE Daten, sehe nun nicht ob ich schneller bin oder nicht ...
-
Forum: Datenbanken
Delphi
by Gruber_Hans_12345,
15. Okt 2009
also hab mir das IBExpert runtergeladen
da funkt das nun
execute block
returns (ID INTEGER, MBID INTEGER)
as
declare variable ID1 INTEGER;
begin
for select ID FROM PERSONAL into :ID
DO begin
-
Forum: Datenbanken
Delphi
by Gruber_Hans_12345,
15. Okt 2009
@hoika
mach ich dann gleich :)
oh, stimmt das order by viel weg ...
das problem bei deiner SQL ist, das er beim WHERE TB.PERSONALID = ID, nicht den ID von den variablen her nimmt, sondern den von TB ...
-
Forum: Datenbanken
Delphi
by Gruber_Hans_12345,
14. Okt 2009
oh, ja, der client passt nicht zum server, ist ne alte IBConsole ...
set term #;
execute block
returns (ID INTEGER, MBID INTEGER)
as
declare variable ID1 INTEGER;
begin
for execute statement
-
Forum: Datenbanken
Delphi
by Gruber_Hans_12345,
14. Okt 2009
hmmm, also bei dem hier, kommen flasche daten raus (er lädt gar nix rein .... )
SELECT FIRST 1 TB.AUFTRAGID FROM TERMINAL_BUCHUNGEN TB WHERE TB.PERSONALID = ID INTO MBID;
und bei dem
SELECT FIRST 1 TB.AUFTRAGID FROM TERMINAL_BUCHUNGEN TB WHERE TB.PERSONALID = :ID INTO MBID;
kommt ein Fehler wegen dem ":"
Dynamic SQL Error
SQL error code = -901
-
Forum: Datenbanken
Delphi
by Gruber_Hans_12345,
14. Okt 2009
@webcss: Das liefert auch die falschen daten
Ich brauche eine Liste von Personal, und zusätzlich brauche ich zu jedem Personal den Auftrag, den er zuletzt gestempelt hat (die letzte Stempelung ist jene, wo BUCHUNG am größten ist)
for execute statement
'select ID FROM PERSONAL' into ID1
DO begin
ID = ID1;
MBID = null;
SELECT FIRST 1 TB.AUFTRAGID FROM...
-
Forum: Datenbanken
Delphi
by Gruber_Hans_12345,
13. Okt 2009
Das Problem ist, dieses SQL liefert falsche Daten, bzw andere Daten,
Ich brauche nicht den größten AuftragID wert sondern den AuftragID Wert von dem datensatz, wo Buchugn am größten ist ...
-
Forum: Datenbanken
Delphi
by Gruber_Hans_12345,
13. Okt 2009
Habe mal folgendes probiert :
set term #;
execute block
as
declare variable ID1 INTEGER;
declare I int = 0;
begin
while (i < 100) do
-
Forum: Datenbanken
Delphi
by Gruber_Hans_12345,
13. Okt 2009
also das
select p.id
, (select tb.auftragid from terminal_buchungen tb
where tb.personalid = p.id and
tb.buchung = (select max(tbs.buchung) from terminal_buchungen tbs where tbs.personalid = p.id)
) as auftragid
from personal p
verwendet PLAN (TBS ORDER TERMINAL_BUCHUNGEN_BUCHUNG INDEX (TB_PERSONALID))
PLAN (TB INDEX (TB_BUCHUNG))
PLAN (P NATURAL)
-
Forum: Datenbanken
Delphi
by Gruber_Hans_12345,
13. Okt 2009
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...
-
Forum: Datenbanken
Delphi
by Gruber_Hans_12345,
13. Okt 2009
Also in eine Zusatztabelle möchte ich es nicht speichern, wird wieder sehr komplex, da pro aufrag mehr als eine person angemeledt sein kann, und eine person wieder auf mehreren aufträgen ....
Ich hätte auch schon probiert die SELECT in SELECT in eine plain SELECT (also mit Joins umzubauen) aber das bringe ich auch irgendwie nicht zusammen
Den soviel ich bisher merken konnte hat der Firebird...
-
Forum: Datenbanken
Delphi
by Gruber_Hans_12345,
13. Okt 2009
Und was gebe ich ihm al sPLAN an, damit er schneller wird?
bzw. gibt es irgendwoi eine doku, wann FB für einen ORDER einen Index verwendet und wann nicht?!?!?
-
Forum: Datenbanken
Delphi
by Gruber_Hans_12345,
13. Okt 2009
ja ist
habe es im ORDER auch mit TB.ID prboiert, das ist der PRIMARY KEY und auch bei dem ist es gleich langsam
da bekomme ich folgenden PLAN
PLAN (TB ORDER RDB$PRIMARY87 INDEX (TB_PERSONALID))
PLAN (P NATURAL)
-
Forum: Datenbanken
Delphi
by Gruber_Hans_12345,
13. Okt 2009
Hallo, ich verwende folgendes Statemant
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
als Plan bekomme ich folgendes raus
PLAN (TB ORDER TB_BUCHUNG INDEX (TB_PERSONALID))
PLAN (P NATURAL)