以下は、各子の子と子を取得する再帰クエリですが、実行に時間がかかりすぎます。このクエリを最適化して、より高速に実行できるようにするにはどうすればよいですか? 個別を削除すると、複数のレコードが表示されます。
DECLARE @int_UserID INT
DECLARE @ProjectID INT
SET @int_UserID=74
SET @ProjectID=96
;WITH Records AS (
SELECT pu.int_USER_ID,alh.int_Level_ID
FROM tbl_PROJECT_USER pu INNER JOIN tbl_Project_User_Role pur ON pu.int_USER_ROLE = pur.int_Project_User_Role_ID
INNER JOIN tbl_Access_Level_Hierarchy alh ON pur.int_Access_Level_IDRef=alh.int_Level_ID
INNER JOIN tbl_USER u ON u.int_USER_ID=pu.int_USER_ID
WHERE pu.int_USER_ID=@int_UserID AND pu.int_PROJECT_ID=@ProjectID
UNION ALL
SELECT pu.int_USER_ID,alh.int_Level_ID
FROM tbl_PROJECT_USER pu INNER JOIN tbl_Project_User_Role pur ON pu.int_USER_ROLE = pur.int_Project_User_Role_ID
INNER JOIN tbl_Access_Level_Hierarchy alh ON pur.int_Access_Level_IDRef=alh.int_Level_ID
INNER JOIN Records R ON R.int_Level_ID=alh.int_Level_Order
WHERE pu.int_PROJECT_ID=@ProjectID
)
SELECT DISTINCT * FROM Records
OPTION(MAXRECURSION 0)
ありがとうございます。いくつかのロジックを変更することで、最適なソリューションが得られました。