同じクエリ内の異なる入力変数に対して、同じテーブル関数を使用して数回結合したいと考えています。しかし、これは私の場合、テーブル変数を使用してテーブル関数から個別に選択するよりもはるかに遅いことがわかりました。
テーブル変数を回避しながら高速クエリを実行するにはどうすればよいですか?
たとえば、次のような SQL クエリがあります。
SELECT P.プロジェクト名、A.番号、B.番号
FROM プロジェクト AS P
LEFT JOIN dbo.fn_ProjectNumber(@dateA) AS A
    ON P.ProjectID = A.ProjectID
左結合 dbo.fn_ProjectNumber(@dateB) AS B
    ON P.ProjectID = B.ProjectID
ただし、関数から個別に変数を選択し、後で結合するよりもはるかに遅くなります。次に例を示します。
@tempA に挿入
SELECT P.ProjectID、A.Number
FROM プロジェクト AS P
LEFT JOIN dbo.fn_ProjectNumber(@dateA) AS A
    ON P.ProjectID = A.ProjectID
@tempB に挿入
SELECT P.ProjectID、B.Number
FROM プロジェクト AS P
左結合 dbo.fn_ProjectNumber(@dateB) AS B
    ON P.ProjectID = B.ProjectID
SELECT P.プロジェクト名、A.番号、B.番号
FROM プロジェクト AS P
左 JOIN @tempA AS A
    ON P.ProjectID = A.ProjectID
左結合 @tempA AS B
    ON P.ProjectID = B.ProjectID
これの原因は何ですか?高速なクエリを取得し、テーブル変数を回避する方法はありますか?
詳細:
これは私がやっていることと似た例にすぎませんが、関数fn_ProjectNumber(@date datetime)には4つのテーブル間の結合のようなものが含まれます...