Я хотел бы присоединиться несколько раз с той же табличной функцией для разных входных переменных в том же запросе. Но в моем случае это оказывается намного медленнее, чем использование переменных таблицы и выбор из функций таблицы отдельно.Оптимизация множественных соединений с помощью табличных функций
Как избежать переменных таблицы и иметь быстрый запрос?
Например, у нас есть SQL запрос типа
SELECT P.ProjectName, A.Number, B.Number FROM Project AS P LEFT JOIN dbo.fn_ProjectNumber(@dateA) AS A ON P.ProjectID = A.ProjectID LEFT JOIN dbo.fn_ProjectNumber(@dateB) AS B ON P.ProjectID = B.ProjectID
но гораздо медленнее, чем при выборе из функций отдельно в переменных, а затем присоединиться позже, например:
INSERT INTO @tempA SELECT P.ProjectID, A.Number FROM Project AS P LEFT JOIN dbo.fn_ProjectNumber(@dateA) AS A ON P.ProjectID = A.ProjectID INSERT INTO @tempB SELECT P.ProjectID, B.Number FROM Project AS P LEFT JOIN dbo.fn_ProjectNumber(@dateB) AS B ON P.ProjectID = B.ProjectID SELECT P.ProjectName, A.Number, B.Number FROM Project AS P LEFT JOIN @tempA AS A ON P.ProjectID = A.ProjectID LEFT JOIN @tempA AS B ON P.ProjectID = B.ProjectID
Что может быть причиной этого? Есть ли способ получить быстрый запрос и избежать переменных таблицы?
Подробнее:
Это только пример, подобное тому, что я делаю, но функция fn_ProjectNumber(@date datetime)
будет содержать что-то вроде соединения между четырьмя столами ...
Вы не указали много информации, чтобы продолжить. как насчет отображения кода из функции, планов выполнения (SET SHOWPLAN_ALL ON) и т. д. –