Squicky
Lt. Commander
- Registriert
- Sep. 2002
- Beiträge
- 1.433
Hallo
Ich habe eine SQL-Laufzeit-Frage.
Mein Problem versuche ich an einer (erfundenen) einfachen Tabelle zu erklären:
Es gibt eine SQL Produkt-Tabelle:
SQL-Abfrage 1:
Nun ist noch folgende Information gebraucht: Anzahl eindeutiger Warenart und Produktart Kombinationen.
Folgende Abfrage liefert richtiges und gesuchtes Ergbnis:
SQL-Abfrage 2:
Abfrage 1 und Abfrage 2 brauchen ca. 2 Sekunden. Diese Zeit ist auch OK.
Wenn man aber an Abfrage 2 folgendenen WHERE Filter anhängt, dann braucht die Abfrage ca. 3 Minuten:
Es sieht so aus: Wenn man nach AnzahlTab.Anzahl_eindeutige_Warenart_Produktart filtert, dann wird für jede Zeile die "Unterabfrage / Untertabelle" (AnzahlTab) neu berechnet.
Aber dies ist nicht nötig. Kann man dies deaktivieren?
Wie kann auf die vier benötigte Spalten aus der Tabelle (Abfrage 2) mit einem einfachen Selectbefehl zugreifen werden?
Die Laufzeit sollte aber bei ca. 2 bis 3 Sekunden liegen. Keine 3 Minuten.
Benutzt wird MS SQL 2012
Danke
Ich habe eine SQL-Laufzeit-Frage.
Mein Problem versuche ich an einer (erfundenen) einfachen Tabelle zu erklären:
Es gibt eine SQL Produkt-Tabelle:
SQL-Abfrage 1:
Code:
SELECT
Nummer
,Warenart
,Produktart
FROM
Tab
Nummer | Warenart | Produktart
------------------------------------
1 | Spielzeug | Hammer
2 | Spielzeug | Puppe
3 | Spielzeug | Hammer
4 | Werkzeug | Hammer
Nun ist noch folgende Information gebraucht: Anzahl eindeutiger Warenart und Produktart Kombinationen.
Folgende Abfrage liefert richtiges und gesuchtes Ergbnis:
SQL-Abfrage 2:
Code:
SELECT
Tab.Nummer
,Tab.Warenart
,Tab.Produktart
,AnzahlTab.Anzahl_eindeutige_Warenart_Produktart
FROM
Tab
INNER JOIN (
SELECT
Warenart
,Produktart
,COUNT(Nummer) AS Anzahl_eindeutige_Warenart_Produktart
FROM
Tab
GROUP BY
Warenart
,Produktart
) AS AnzahlTab
ON Tab.Warenart = AnzahlTab.Warenart
AND Tab.Produktart = AnzahlTab.Produktart
Nummer | Warenart | Produktart | Anzahl_eindeutige_Warenart_Produktart
-------------------------------------------------------------------------
1 | Spielzeug | Hammer | 2
2 | Spielzeug | Puppe | 1
3 | Spielzeug | Hammer | 2
4 | Werkzeug | Hammer | 1
Abfrage 1 und Abfrage 2 brauchen ca. 2 Sekunden. Diese Zeit ist auch OK.
Wenn man aber an Abfrage 2 folgendenen WHERE Filter anhängt, dann braucht die Abfrage ca. 3 Minuten:
Code:
WHERE AnzahlTab.Anzahl_eindeutige_Warenart_Produktart = 1
Es sieht so aus: Wenn man nach AnzahlTab.Anzahl_eindeutige_Warenart_Produktart filtert, dann wird für jede Zeile die "Unterabfrage / Untertabelle" (AnzahlTab) neu berechnet.
Aber dies ist nicht nötig. Kann man dies deaktivieren?
Wie kann auf die vier benötigte Spalten aus der Tabelle (Abfrage 2) mit einem einfachen Selectbefehl zugreifen werden?
Die Laufzeit sollte aber bei ca. 2 bis 3 Sekunden liegen. Keine 3 Minuten.
Benutzt wird MS SQL 2012
Danke