Einzelnen Beitrag anzeigen

hoika

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

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

  Alt 25. Aug 2009, 07: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