select的下半部分是 UNION
SELECT V_MSP_TASKS_Orig.[PROJ_ID], [TASK_UID], [TASK_ID],
[TASK_OUTLINE_LEVEL], [TASK_OUTLINE_NUM], [TASK_NAME], '',
[TASK_IS_SUMMARY], '', CASE WHEN LOWER([IsSubproject]) = 'ja' THEN 1
ELSE 0
END AS TASK_IS_SubProject, '', '', -1, -1, '',
0, 0, '', -1
FROM [V_MSP_TASKS_Orig] WITH(nolock)
LEFT OUTER JOIN [V_EPF_IsSubproject] WITH(nolock)
ON [V_MSP_TASKS_Orig].[PROJ_ID] = [V_EPF_IsSubproject].[PROJ_ID]
WHERE V_MSP_TASKS_Orig.[PROJ_ID] = @ProjectID
AND EXISTS ( SELECT [TASK_UID]
FROM V_LineCapacityExt_AssignmentInfos WITH(nolock)
LEFT OUTER JOIN V_CS_LineCapacity_Resource_FlagFields WITH(nolock)
ON V_CS_LineCapacity_Resource_FlagFields.RES_EUID = V_LineCapacityExt_AssignmentInfos.RES_EUID
WHERE V_LineCapacityExt_AssignmentInfos.[PROJ_ID] = @ProjectID AND TASK_DUR > 0
AND (V_LineCapacityExt_AssignmentInfos.[RBS_FULL_NAME] LIKE @UsersRBS
+ '.%'
OR (@OnlySubLevels = 0
AND V_LineCapacityExt_AssignmentInfos.[RBS_FULL_NAME] LIKE @UsersRBS
)
OR (@OnlySubLevels = 1
AND V_LineCapacityExt_AssignmentInfos.[RES_EUID] = @UsersRes_EUID
)
)
AND (V_CS_LineCapacity_Resource_FlagFields.FLAG_VALUE = 1)
AND (V_CS_LineCapacity_Resource_FlagFields.FLAG_FIELD_ID = @ResourceFlag_FlagFieldID)
AND ((V_LineCapacityExt_AssignmentInfos.[ASSN_START_DATE] < @StartDate
AND V_LineCapacityExt_AssignmentInfos.[ASSN_FINISH_DATE] >= @StartDate
)
OR (V_LineCapacityExt_AssignmentInfos.[ASSN_START_DATE] >= @StartDate
AND V_LineCapacityExt_AssignmentInfos.[ASSN_START_DATE] < @EndDate
)
)
AND V_LineCapacityExt_AssignmentInfos.TASK_OUTLINE_NUM LIKE V_MSP_TASKS_Orig.[TASK_OUTLINE_NUM]
+ '.%' )
AND NOT EXISTS ( SELECT [TASK_UID]
FROM V_LineCapacityExt_AssignmentInfos WITH(nolock)
LEFT OUTER JOIN V_CS_LineCapacity_Resource_FlagFields WITH(nolock)
ON V_CS_LineCapacity_Resource_FlagFields.RES_EUID = V_LineCapacityExt_AssignmentInfos.RES_EUID
WHERE V_LineCapacityExt_AssignmentInfos.[PROJ_ID] = @ProjectID AND TASK_DUR > 0
AND (V_LineCapacityExt_AssignmentInfos.[RBS_FULL_NAME] LIKE @UsersRBS
+ '.%'
OR (@OnlySubLevels = 0
AND V_LineCapacityExt_AssignmentInfos.[RBS_FULL_NAME] LIKE @UsersRBS
)
OR (@OnlySubLevels = 1
AND V_LineCapacityExt_AssignmentInfos.[RES_EUID] = @UsersRes_EUID
)
)
AND (V_CS_LineCapacity_Resource_FlagFields.FLAG_VALUE = 1)
AND (V_CS_LineCapacity_Resource_FlagFields.FLAG_FIELD_ID = @ResourceFlag_FlagFieldID)
AND ((V_LineCapacityExt_AssignmentInfos.[ASSN_START_DATE] < @StartDate
AND V_LineCapacityExt_AssignmentInfos.[ASSN_FINISH_DATE] >= @StartDate
)
OR (V_LineCapacityExt_AssignmentInfos.[ASSN_START_DATE] >= @StartDate
AND V_LineCapacityExt_AssignmentInfos.[ASSN_START_DATE] < @EndDate
)
)
AND V_LineCapacityExt_AssignmentInfos.TASK_UID = V_MSP_TASKS_Orig.[TASK_UID] )因为内容太长,我只能分2次贴了。
SELECT V_MSP_TASKS_Orig.[PROJ_ID], [TASK_UID], [TASK_ID],
[TASK_OUTLINE_LEVEL], [TASK_OUTLINE_NUM], [TASK_NAME], '',
[TASK_IS_SUMMARY], '', CASE WHEN LOWER([IsSubproject]) = 'ja' THEN 1
ELSE 0
END AS TASK_IS_SubProject, '', '', -1, -1, '',
0, 0, '', -1
FROM [V_MSP_TASKS_Orig] WITH(nolock)
LEFT OUTER JOIN [V_EPF_IsSubproject] WITH(nolock)
ON [V_MSP_TASKS_Orig].[PROJ_ID] = [V_EPF_IsSubproject].[PROJ_ID]
WHERE V_MSP_TASKS_Orig.[PROJ_ID] = @ProjectID
AND EXISTS ( SELECT [TASK_UID]
FROM V_LineCapacityExt_AssignmentInfos WITH(nolock)
LEFT OUTER JOIN V_CS_LineCapacity_Resource_FlagFields WITH(nolock)
ON V_CS_LineCapacity_Resource_FlagFields.RES_EUID = V_LineCapacityExt_AssignmentInfos.RES_EUID
WHERE V_LineCapacityExt_AssignmentInfos.[PROJ_ID] = @ProjectID AND TASK_DUR > 0
AND (V_LineCapacityExt_AssignmentInfos.[RBS_FULL_NAME] LIKE @UsersRBS
+ '.%'
OR (@OnlySubLevels = 0
AND V_LineCapacityExt_AssignmentInfos.[RBS_FULL_NAME] LIKE @UsersRBS
)
OR (@OnlySubLevels = 1
AND V_LineCapacityExt_AssignmentInfos.[RES_EUID] = @UsersRes_EUID
)
)
AND (V_CS_LineCapacity_Resource_FlagFields.FLAG_VALUE = 1)
AND (V_CS_LineCapacity_Resource_FlagFields.FLAG_FIELD_ID = @ResourceFlag_FlagFieldID)
AND ((V_LineCapacityExt_AssignmentInfos.[ASSN_START_DATE] < @StartDate
AND V_LineCapacityExt_AssignmentInfos.[ASSN_FINISH_DATE] >= @StartDate
)
OR (V_LineCapacityExt_AssignmentInfos.[ASSN_START_DATE] >= @StartDate
AND V_LineCapacityExt_AssignmentInfos.[ASSN_START_DATE] < @EndDate
)
)
AND V_LineCapacityExt_AssignmentInfos.TASK_OUTLINE_NUM LIKE V_MSP_TASKS_Orig.[TASK_OUTLINE_NUM]
+ '.%' )
AND NOT EXISTS ( SELECT [TASK_UID]
FROM V_LineCapacityExt_AssignmentInfos WITH(nolock)
LEFT OUTER JOIN V_CS_LineCapacity_Resource_FlagFields WITH(nolock)
ON V_CS_LineCapacity_Resource_FlagFields.RES_EUID = V_LineCapacityExt_AssignmentInfos.RES_EUID
WHERE V_LineCapacityExt_AssignmentInfos.[PROJ_ID] = @ProjectID AND TASK_DUR > 0
AND (V_LineCapacityExt_AssignmentInfos.[RBS_FULL_NAME] LIKE @UsersRBS
+ '.%'
OR (@OnlySubLevels = 0
AND V_LineCapacityExt_AssignmentInfos.[RBS_FULL_NAME] LIKE @UsersRBS
)
OR (@OnlySubLevels = 1
AND V_LineCapacityExt_AssignmentInfos.[RES_EUID] = @UsersRes_EUID
)
)
AND (V_CS_LineCapacity_Resource_FlagFields.FLAG_VALUE = 1)
AND (V_CS_LineCapacity_Resource_FlagFields.FLAG_FIELD_ID = @ResourceFlag_FlagFieldID)
AND ((V_LineCapacityExt_AssignmentInfos.[ASSN_START_DATE] < @StartDate
AND V_LineCapacityExt_AssignmentInfos.[ASSN_FINISH_DATE] >= @StartDate
)
OR (V_LineCapacityExt_AssignmentInfos.[ASSN_START_DATE] >= @StartDate
AND V_LineCapacityExt_AssignmentInfos.[ASSN_START_DATE] < @EndDate
)
)
AND V_LineCapacityExt_AssignmentInfos.TASK_UID = V_MSP_TASKS_Orig.[TASK_UID] )因为内容太长,我只能分2次贴了。
>>>在profiler中找出耗时比较多的语句吧,在客户环境上录profiler
昨天客户那边profiler录到hash warnings. 我把SP重新写了下,今天早上测试,客户环境中快了10倍. 再看看后面客户的反馈吧。