Рассмотрите возможность использования операторов EXISTS и WHERE.EXISTS
имеет лучшую производительность, чем IN
.WHERE
оператор выполняется до GROUP BY
, поэтому мы имеем лучшую производительность.Кроме того, попробуйте переместить операторы WHERE
до GROUP BY
, так как это отфильтрует строки, и у вас будет меньше строк для фильтрации.
SELECT *
FROM
(
SELECT dbo.Table1.Table1_ID,
dbo.Table1.Name,
dbo.Table5.Ergebniss,
dbo.Table2.Datum,
dbo.Table3.Stelle,
dbo.Table2.Nummer
FROM dbo.Table1
INNER JOIN dbo.Table2
ON dbo.Table1.Table1_ID = dbo.Table2.Table1_ID
INNER JOIN dbo.Table3
ON dbo.Table2.Table2_ID = dbo.Table3.Table2_ID
INNER JOIN dbo.Table4
ON dbo.Table3.Table3_ID = dbo.Table4.Table3_ID
INNER JOIN dbo.Table5
ON dbo.Table4.Table4_ID = dbo.Table5.Table4_ID
WHERE (dbo.Table1.Table1_ID = 1)
AND (dbo.Table2.Nummer =
(
SELECT MAX(dbo.Table2.Nummer) AS MaxSchichtNummer
FROM dbo.Table1
INNER JOIN dbo.Table2
ON dbo.Table1.Table1_ID = dbo.Table2.Table1_ID
WHERE (dbo.Table1.Table1_ID = 1)
)
)
and exists
(
SELECT TOP 5000
Nummer
FROM dbo.Table2
WHERE Table1_ID = 1
AND nummer = dbo.Table2.Nummer
)
GROUP BY dbo.Table1.Table1_ID,
dbo.Table1.NAME,
dbo.Table5.Wert2,
dbo.Table5.Wert1,
dbo.Table5.Ergebniss,
dbo.Table2.Datum,
dbo.Table2.Nummer,
dbo.Table3.Stelle
) AS TG
ORDER BY Datum DESC;