![]() |
Re: Lange Wartezeit für Datenabfrage für Gauss-Graphen
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' |
Re: Lange Wartezeit für Datenabfrage für Gauss-Graphen
Zitat:
|
Re: Lange Wartezeit für Datenabfrage für Gauss-Graphen
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:
Nächster Schritt wäre das IN durch EXISTS zu ersetzen.
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-92' AND V2.MW_NAME = 'Kriterium' AND (V2.IST_WERT >= (V2.SOLL_WERT - 0.05)) AND (V2.IST_WERT <= (V2.SOLL_WERT + 0.05)) ) 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:
Ich würde das per SELECT V1.IST_WERT mit wenigen Werten einfach mal ausprobieren.
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-92' AND V2.MW_NAME = 'Kriterium' AND (V2.IST_WERT >= (V2.SOLL_WERT - 0.05)) AND (V2.IST_WERT <= (V2.SOLL_WERT + 0.05)) Heiko |
Re: Lange Wartezeit für Datenabfrage für Gauss-Graphen
Ahhh. Jetzt verstehe ich es auch endlich. ;-)
SQL-Code:
Das von "alzaimar" werde ich aber auch nochmal probieren. Dank Dir.
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 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 _ |
Re: Lange Wartezeit für Datenabfrage für Gauss-Graphen
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:
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 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:10 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