0

以下は、各子の子と子を取得する再帰クエリですが、実行に時間がかかりすぎます。このクエリを最適化して、より高速に実行できるようにするにはどうすればよいですか? 個別を削除すると、複数のレコードが表示されます。

        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)

ありがとうございます。いくつかのロジックを変更することで、最適なソリューションが得られました。

4

0 に答える 0