MSSQL 2005 Skalarwertfunktionen - extrem langsam
In einem SQL mit 6 Joins werden auch 6 Skalarwertfunktionen aufgerufen.
Hallo Zusammen,
ich musste meine Software von einem Sybase Server auf einen MSSQL Server umstellen. Und jetzt habe ich erschreckend festgestellt, dass der MSSQL Server für die u.g. Abfrage 1,5 Minuten braucht und der Sybase Server hat seine 6 Sekunden dafür benötigt.
Der Aufbau des SQL's ist wie folgt:
SELECT
funktion1(tabelle1.spalte1),
funktion1(tabelle2.spalte2),
funktion2(tabelle1.spalte3),
funktion2(tabelle2.spalte4),
funktion3(tabelle3.spalte5),
funktion3(tabelle3.spalte6)
FROM
tabelle11
LEFT JOIN tabelle2 ON tabelle1.spalte1 = tabelle2.spalte1
LEFT JOIN tabelle3 ON tabelle2.spalte1 = tabelle3.spalte1
LEFT JOIN tabelle4 ON tabelle3.spalte1 = tabelle4.spalte1
LEFT JOIN tabelle5 ON tabelle4.spalte1 = tabelle5.spalte1
LEFT JOIN tabelle6 ON tabelle5.spalte1 = tabelle6.spalte1
WHERE tabelle6.spalte1 = 'wert'
Meine Vermutung ist das der MSSQL Server zuerst alle Datensätze sammelt, anschließend die Funktionen über alle Datensätze jagt und dann erst nach der WHERE Bedingung filtert.
Gibt es dort einen Trick oder ein besseres Vorgehen?
Vielen Dank im Vorraus
Mit freundlichen Grüßen
Jorg
Hallo Zusammen,
ich musste meine Software von einem Sybase Server auf einen MSSQL Server umstellen. Und jetzt habe ich erschreckend festgestellt, dass der MSSQL Server für die u.g. Abfrage 1,5 Minuten braucht und der Sybase Server hat seine 6 Sekunden dafür benötigt.
Der Aufbau des SQL's ist wie folgt:
SELECT
funktion1(tabelle1.spalte1),
funktion1(tabelle2.spalte2),
funktion2(tabelle1.spalte3),
funktion2(tabelle2.spalte4),
funktion3(tabelle3.spalte5),
funktion3(tabelle3.spalte6)
FROM
tabelle11
LEFT JOIN tabelle2 ON tabelle1.spalte1 = tabelle2.spalte1
LEFT JOIN tabelle3 ON tabelle2.spalte1 = tabelle3.spalte1
LEFT JOIN tabelle4 ON tabelle3.spalte1 = tabelle4.spalte1
LEFT JOIN tabelle5 ON tabelle4.spalte1 = tabelle5.spalte1
LEFT JOIN tabelle6 ON tabelle5.spalte1 = tabelle6.spalte1
WHERE tabelle6.spalte1 = 'wert'
Meine Vermutung ist das der MSSQL Server zuerst alle Datensätze sammelt, anschließend die Funktionen über alle Datensätze jagt und dann erst nach der WHERE Bedingung filtert.
Gibt es dort einen Trick oder ein besseres Vorgehen?
Vielen Dank im Vorraus
Mit freundlichen Grüßen
Jorg
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 99138
Url: https://administrator.de/contentid/99138
Ausgedruckt am: 26.11.2024 um 03:11 Uhr