![]() |
Datenbank: FB • Version: 1.5 • Zugriff über: egal
Frage zu Query-Optimierung
Hallo #,
geg. sind folgenden Tabellen Calc: CalcId Integer, CalcFrom Date, CalcTo Date Calc_Person: CalcId Integer, PersonalId Integer Calc_Data: CalcId Integer, PersonalId Integer, die Daten ... In Calc stehen Abrechnungen, Calc_Person merkt sich die Personen, und in Calc_Data stehen die Abrechnungsdaten für die Personen. Ich benötige jetzt die Daten der letzten Abrechnung aller Personen. Problem: Falls eine Person von der Firma weg ist, steht sie in der letzten Abrechnung nicht drin, dann muss ich ebend die vorletzte suchen usw. Bisher mache ich das so (in einer Schleife für alle Personen ;( ). - letzte Abrechnung der Person suchen
SQL-Code:
ein First 1 baue ich noch ein, bringt bestimmt was, aber ich will weg von der Schleife.
Select CalcId Where Calc Where CalcFrom<:CheckDate
Join Calc_Person On Calc_Person.CalcId=Calc.CalcId Where Calc_Person.PersonalId=:PersonalId Order By CalcFrom Desc die CalcId selbst kann ich nicht benutzen (autoInc), weil es infolge Replikation verschiedene Nummernkreise gibt (CalcId=10000 kann eine ältere Abrechnung wie CalcId=10 sein). - Daten ermitteln
SQL-Code:
Das ganze "dauert", vor allem ist es abhängig von der Personenzahl.
Select * From Calc_Data
Where (CalcId=:CalcId) and (PersonalId=:PersonalId) Ich würde das gern über eine einzige Query ohne SubSelect machen. Als einzige Lösung fällt mir eine SP sein, dass will ich aber vermeiden. Danke Heiko |
Re: Frage zu Query-Optimierung
Hier mal ein Vorschlag...
SQL-Code:
Ohne SubSelect wird es allerdings nicht gehen.
SELECT personalid, cd.*
FROM calc c INNER JOIN calc_data cd ON c.calcid = cd.calcid WHERE calcto = (SELECT MAX(calcto) FROM calc_data WHERE calcid = cd.calcid AND personalid = cd.personalid) Gruss Thorsten |
Re: Frage zu Query-Optimierung
Hallo,
mit Subselects habe ich so meine bösen Erfahrungen gemacht unter FB und so richtig komme ich mit der Syntax nicht klar :) Schade. Dann kommt halt ne SP rein. Danke Heiko |
Re: Frage zu Query-Optimierung
Hallo,
kleines Update, ich habe das Performance-Problem lokalisiert. Unter IB6 lief das hier Order By CalcTo Desc sehr schnell Unter FB1.5 ist das irgendwie sehr viel langsamer. Ich brauche aber max. die ersten beiden Datensätze, mit Select First 2 bla ... ist es wieder normal schnell. Heiko |
Re: Frage zu Query-Optimierung
Scheint ja eher ein fehlender Index gewesen zu sein.
|
Re: Frage zu Query-Optimierung
Hallo,
nö, die DB läuft beim Kunden seit Jahren unter IB6. Ist auf jeden Fall etwas merkwürdig. Mit FB 1.5 und dem Select First 2 habe ich die normale IB6-Performance. Heiko |
Re: Frage zu Query-Optimierung
Ich würde trotzdem mal den Index neu aufbauen
|
Re: Frage zu Query-Optimierung
Hallo,
Neuaufbau hat nichts geholfen. Aber halt das Select First 2 Heiko |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:56 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