AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi [Advantage] Komplexere Abfrage dauert ewig
Thema durchsuchen
Ansicht
Themen-Optionen

[Advantage] Komplexere Abfrage dauert ewig

Ein Thema von Nuclear-Ping · begonnen am 10. Sep 2007 · letzter Beitrag vom 16. Okt 2007
 
Nuclear-Ping
(Gast)

n/a Beiträge
 
#12

Re: [Advantage] Komplexere Abfrage dauert ewig

  Alt 11. Sep 2007, 04:16
Hab mir das jetzt mal näher angeschaut und 'ne Query über die Temp.tabelle gebastelt. Allerdings bekomme ich da garkein Ergebnis mehr.
SQL-Code:
/*
DROP
  TABLE
    #TempTable;
*/

// ****
   
SELECT TOP 20 *
  INTO
    #TempTable
  FROM
    SendingSchedule
  ORDER BY
    SendingTimestamp ASC;
   
SELECT /* TOP 20 */
    C.ID,
    C.Name,
    H.Title,
    H.ObjectID,
    O.Name,
    O.ID,
    S.*
FROM
    #TempTable S
    INNER JOIN Clients C ON C.ID = S.ClientID
    INNER JOIN HealingsheetsIndex H ON H.ID = S.HealingsheetIndexID
    LEFT OUTER JOIN Objects O ON O.ID = H.ObjectID
WHERE
    H.Active = TRUE
    AND S.Active = TRUE;
// ****
[Edit]
Ok, es liegt am WHERE. Wenn ich nur S.Active drin lasse, bekomme ich zwar Ergebnisse, aber die weichen von der alten Query ab, da es weniger als 20 sind.
S.Active bezieht sich auf den jeweiligen Sendeeintrag. Wenn S.Active = FALSE ist, bedeutet das, dass der Eintrag gesendet wurde. H.Active bezieht sich aber auf die ganze Liste. Er soll mir also die Listen gleich draussen lassen, die generell nicht (mehr) aktiv sind.
Ich denke das liegt daran, weil die erste Query ja nur die TOP 20 aus SendingSchedules zieht, ohne auf HealingsheetIndex.Active zu achten. Aber wenn ich damit bisschen rumspiele, wird das Ganze schonwieder ziemlich langsam.

SQL-Code:
SELECT TOP 20 *
  INTO
    #TempTable
  FROM
    SendingSchedule S
    INNER JOIN HealingsheetsIndex H ON H.ID = S.HealingsheetIndexID
  WHERE
    H.Active = TRUE AND
    S.Active = TRUE
  ORDER BY
    SendingTimestamp ASC;   
      
SELECT
    C.ID,
    C.Name,
    H.Title,
    H.ObjectID,
    O.Name,
    O.ID,
    S.*
FROM
    #TempTable S
    INNER JOIN Clients C ON C.ID = S.ClientID
    INNER JOIN HealingsheetsIndex H ON H.ID = S.HealingsheetIndexID
    LEFT OUTER JOIN Objects O ON O.ID = H.ObjectID;
Bringt das gewünschte Ergebnis, allerdings auch erst wieder nach ~50sek. Wenn ich hier "ORDER BY" aus der ersten Query rausnehme, kommt das Ergebnis sofort, allerdings nicht die 20 nächsten Listen sondern quer durch's Gemüsebeet, unsortiert eben.
[/Edit]

[Nochmal Edit]
So wie es ausschaut, bremst ORDER BY oder TOP 20 immer aus, sobald man sie mit anderen Tabellen verknüpft (bei dieser Datenmenge). Die Ursprungsquery ohne TOP 20 und ohne ORDER BY geht flott. Ich hab daher schon daran gedacht, die Ergebnisse in dem Programm dann sortieren zu lassen.

Was würde man für so eine Datenmenge für einen Algo nehmen, der mir das nach dem Datum im Nu sortieren kann?

Und nochmal ...
Grad versucht, QuickSort da reinzubauen. Problem ist nur, dass im Programm der erste Aufruf von .RecordCount ~30sek dauert, dann die Zuweisung in ein Array, welches ich an QuickSort übergeben kann nochmal solange. Der Algo selber braucht dann nur ~10sek ...
[/Edit]
  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 09:21 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