AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Lange Wartezeit für Datenabfrage für Gauss-Graphen
Thema durchsuchen
Ansicht
Themen-Optionen

Lange Wartezeit für Datenabfrage für Gauss-Graphen

Ein Thema von DoktorD · begonnen am 23. Aug 2009 · letzter Beitrag vom 25. Aug 2009
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#11

Re: Lange Wartezeit für Datenabfrage für Gauss-Graphen

  Alt 25. Aug 2009, 08:29
schließt sich das nicht gegenseitig aus?
Code:
AND dbo.V_MEASURE.[b]MW_NAME[/b] = 'Kriterium'
AND dbo.V_MEASURE.[b]MW_NAME[/b] = 'Temperatur T1'
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#12

Re: Lange Wartezeit für Datenabfrage für Gauss-Graphen

  Alt 25. Aug 2009, 08:32
Zitat von himitsu:
schließt sich das nicht gegenseitig aus?
Irgendwie schon. Habs einfach von oben übernommen.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
hoika

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

Re: Lange Wartezeit für Datenabfrage für Gauss-Graphen

  Alt 25. Aug 2009, 08:46
Hallo,

dein Hauptproblem ist der SubSelect (IN)
Für jede Zeile der Tabelle wird er ausgeführt.
DB's optimieren meist von links nach rechts (MSSQL-2000 ist je schon etwas älter)

Ausserdem wid die Tabelle hier 2mal benutzt -> Table Aliases

1. Mit subselect
================

Als erstes würde ich also die Where-Klausel umstellen
(testen kann man es ja mal)

SQL-Code:
SELECT COUNT(V1.IST_WERT)
FROM dbo.V_MEASURE V1
WHERE
V1.MW_NAME = 'Temperatur T1'
AND V1.IST_WERT >= (0.000)
AND V1.IST_WERT <= (0.025)

and V1.PRUEFID IN
  (
  SELECT V2.PRUEFID FROM dbo.V_MEASURE V2
  where V2.AUFTRAG = '1291626-92AND
        V2.MW_NAME = 'KriteriumAND
       (V2.IST_WERT >= (V2.SOLL_WERT - 0.05)) AND
       (V2.IST_WERT <= (V2.SOLL_WERT + 0.05))
  )
Nächster Schritt wäre das IN durch EXISTS zu ersetzen.
Das sollte schneller sein (unter Firebird ist es es auf jeden Fall).


Schwieriger ist es den Subselect loszuwerden.
Aber hier ginge doch ein Join ?

Jetzt mal aus der kalten getippert

SQL-Code:
SELECT COUNT(V1.IST_WERT)
FROM dbo.V_MEASURE V1

INNER JOIN dbo.V_MEASURE V2
ON V1.PRUEFID=V2.PRUEFID

WHERE
V1.MW_NAME = 'Temperatur T1'
AND V1.IST_WERT >= (0.000)
AND V1.IST_WERT <= (0.025)

AND V2.AUFTRAG = '1291626-92AND
    V2.MW_NAME = 'KriteriumAND
    (V2.IST_WERT >= (V2.SOLL_WERT - 0.05)) AND
    (V2.IST_WERT <= (V2.SOLL_WERT + 0.05))
Ich würde das per SELECT V1.IST_WERT mit wenigen Werten einfach mal ausprobieren.


Heiko
Heiko
  Mit Zitat antworten Zitat
DoktorD

Registriert seit: 13. Dez 2005
153 Beiträge
 
#14

Re: Lange Wartezeit für Datenabfrage für Gauss-Graphen

  Alt 25. Aug 2009, 09:39
Ahhh. Jetzt verstehe ich es auch endlich.
SQL-Code:
select dbo.TemporaereKlassen.Klasse, Count(*) AS Anzahl FROM
  dbo.V_Measure INNER JOIN dbo.TemporaereKlassen ON
  (dbo.V_Measure.IST_WERT >= dbo.TemporaereKlassen.MinValue) AND
  (dbo.V_Measure.IST_WERT < dbo.TemporaereKlassen.MaxValue)
WHERE dbo.V_Measure.Auftrag = '1291626-92'
GROUP BY dbo.TemporaereKlassen.Klasse
Das von "alzaimar" werde ich aber auch nochmal probieren. Dank Dir.


Gibts denn auch eine Lösung für das erstellen einer temporären Tabelle mit den Klassen?
Ich kann hier im Forum und im restlichen Internet einfach nichts drüber finden







_
  Mit Zitat antworten Zitat
hoika

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

Re: Lange Wartezeit für Datenabfrage für Gauss-Graphen

  Alt 25. Aug 2009, 10:15
Hallo,

also wenn ich in google "sql server temp table" eingebe,
bekomme ich ne Menge Input ...

Das IN wird in eine Temp-Table (Create Table #X)
geschoben und dann per Join mit der Ursprungstabelle verknüpft.

Aber:
1. schickes Zitat
Zitat:
most of the time this will be slower than a few good joins, but not always
2. temp tables (local also mit einem #) sind sichtbar innerhalb der
eigenen Connection, nicht nur dieser Abfrage und werden beim Close (oder Drop Table) gelöscht.

Warum temp tables, wenn es über einen Join auch geht
und der Weg mit der temp table auch über einen Join geht ?


Heiko
Heiko
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 19:02 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