AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Benötigte Zeit für einen Abfrage
Thema durchsuchen
Ansicht
Themen-Optionen

Benötigte Zeit für einen Abfrage

Ein Thema von Dumpfbacke · begonnen am 27. Dez 2013 · letzter Beitrag vom 28. Dez 2013
 
nahpets
(Gast)

n/a Beiträge
 
#10

AW: Benötigte Zeit für einen Abfrage

  Alt 28. Dez 2013, 15:29
In Ermangelung einer entsprechenden Datenbank (und daher ungetestet) hier ein Vorschlag, wie er unter Oracle funktionieren könnte:
Delphi-Quellcode:
  select *
  from Tabelle1,
       Tabelle2,
       (Select Max(AAZaehler) As AAZaehler
        from Tabelle2
        where Kriterium = 'ID'
        and AAStatus <> 'Erledigt'
       ) MaxAAZaehler
  where Tabelle1.BNummer = Tabelle2.BNummer (+)
  and Tabelle1.Feld1 = '4EE'
  and Tabelle1.Feld2 = 'Frankfurt'
  and Tabelle2.aazaehler = MaxAAZaehler.aazaehler
  union
  select *
  from Tabelle1,
       Tabelle2,
       (Select Max(AAZaehler) As AAZaehler
        from Tabelle2
        where Kriterium = 'ID'
        and AAStatus <> 'Erledigt'
       ) MaxAAZaehler
  where Tabelle1.BNummer = Tabelle2.BNummer (+)
  and Tabelle1.Feld1 = '4EE'
  and Tabelle1.Feld2 = 'München'
  and Tabelle2.aazaehler = MaxAAZaehler.aazaehler;
Sofern die "Oraclevariante" nicht funktioniert eine View anlegen:
Delphi-Quellcode:
create view V_MaxAAZaehler as
Select Max(AAZaehler) As AAZaehler
from Tabelle2
where Kriterium = 'ID'
and AAStatus <> 'Erledigt'
und dieses SQL probieren:
Delphi-Quellcode:
select *
  from Tabelle1,
       Tabelle2,
       V_MaxAAZaehler
  where Tabelle1.BNummer = Tabelle2.BNummer
  and Tabelle1.Feld1 = '4EE'
  and Tabelle1.Feld2 = 'Frankfurt'
  and Tabelle2.aazaehler = V_MaxAAZaehler.aazaehler
  union
  select *
  from Tabelle1,
       Tabelle2,
       V_MaxAAZaehler
  where Tabelle1.BNummer = Tabelle2.BNummer
  and Tabelle1.Feld1 = '4EE'
  and Tabelle1.Feld2 = 'München'
  and Tabelle2.aazaehler = V_MaxAAZaehler.aazaehler
oder eventuell auch
Delphi-Quellcode:
select *
  from Tabelle1,
       Tabelle2,
       V_MaxAAZaehler
  where Tabelle1.BNummer = Tabelle2.BNummer
  and Tabelle1.Feld1 = '4EE'
  and (Tabelle1.Feld2 = 'Frankfurtor Tabelle1.Feld2 = 'München')
  -- bzw.
  -- and Tabelle1.Feld2 in ('Frankfurt','München')
  and Tabelle2.aazaehler = V_MaxAAZaehler.aazaehler
Konstrukte dieser Art: ... and Tabelle2.aazaehler = (Select Max(AAZaehler) from Tabelle2 AA where AA.BNummer = Tabelle1.BNummer... haben sich in der Vergangenheit bei meinen Implementierungen häufig als arge Flaschenhälse oder Perfomancekiller herausgestellt, so dass ich es tunlichst vermeide, derartige Konstrukte zu verwenden.
Je nach Datenbank und Cleverness des Optimierers kann es sein, dass das Subselect in der Wherebedingung je Datensatz ausgeführt wird. Hier kommen dann auch bei wenigen Millisekunden für die Ausführung des Subselectes für einen Datensatz, doch recht schnell sehr hohe Laufzeiten für ein paar tausend Datensätze heraus.

Geändert von nahpets (28. Dez 2013 um 15:31 Uhr) Grund: Schreib... und sonstige Fehler rausgemacht...
  Mit Zitat antworten Zitat
 


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 08:46 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