AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Frage zu Query-Optimierung
Thema durchsuchen
Ansicht
Themen-Optionen

Frage zu Query-Optimierung

Ein Thema von hoika · begonnen am 18. Feb 2008 · letzter Beitrag vom 19. Feb 2008
Antwort Antwort
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#1

Frage zu Query-Optimierung

  Alt 18. Feb 2008, 12:05
Datenbank: FB • Version: 1.5 • Zugriff über: egal
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:
    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
ein First 1 baue ich noch ein, bringt bestimmt was, aber ich will weg von der Schleife.
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:
  Select * From Calc_Data
  Where (CalcId=:CalcId) and (PersonalId=:PersonalId)
Das ganze "dauert", vor allem ist es abhängig von der Personenzahl.

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
Heiko
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Frage zu Query-Optimierung

  Alt 18. Feb 2008, 17:43
Hier mal ein Vorschlag...
SQL-Code:
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)
Ohne SubSelect wird es allerdings nicht gehen.

Gruss
Thorsten
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: Frage zu Query-Optimierung

  Alt 18. Feb 2008, 18:09
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
Heiko
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Frage zu Query-Optimierung

  Alt 18. Feb 2008, 21:25
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
Heiko
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Frage zu Query-Optimierung

  Alt 18. Feb 2008, 21:29
Scheint ja eher ein fehlender Index gewesen zu sein.
Markus Kinzler
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Frage zu Query-Optimierung

  Alt 18. Feb 2008, 22:25
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
Heiko
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Frage zu Query-Optimierung

  Alt 18. Feb 2008, 22:26
Ich würde trotzdem mal den Index neu aufbauen
Markus Kinzler
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: Frage zu Query-Optimierung

  Alt 19. Feb 2008, 08:12
Hallo,

Neuaufbau hat nichts geholfen.
Aber halt das Select First 2


Heiko
Heiko
  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 22:41 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz