大家好, 如何使这个查询最佳性能,因为它超时 大量的记录,请帮忙 请注意,我在一些与
连接的表格上制作了索引如果有任何更新或以任何方式以新方式重写此存储过程 使其运行更快或性能最佳。
ALTER PROCEDURE [dbo].[LoadClosedRequests]
@RequestBusinessUnitId int,
@StatusId int,
@ProdId int,
@SortExp varchar(100),
@RequestID int,
@RequestNumber int,
@User varchar(56)
AS
SELECT Request.RequestID,RequestStatusID,RequestStatusName,
BusinessUnitName,
RequestWorkFlowID,
RequestDate,RequestHFMApplicationID as RequestApplication,[User].UserName as RequestUserUserName,User_SWFT.UserId as RequestUserUserId,[User].UserEmail as RequestUserUserEmail,-1 as RequestParentKey,'' as RequestDescription,'' as RequestInitiatorUserName, -1 as RequestInitiatorUserId,'' as RequestInitiatorUserEmail
,Request.RequestType as RequestType,workflow.productID,productname
FROM
(
select requestid,LatestStatusDate,RequestStatusID,RequestStatusName
from
(
SELECT [RequestID],Max(HistoryItemDate) as LatestStatusDate
from historyitem inner join request on historyitemRequestid=requestid
group by RequestID
) currentstatus
inner join historyitem on RequestID=HistoryItemRequestID and historyitemdate=LatestStatusDate
inner join RequestStatus on RequestStatus.RequestStatusID=HistoryItem.HistoryItemRequestStatusID and HistoryItem.HistoryItemRequestStatusID in(2,3,4,5,6,9,10)
--order by requestid
) LatestStatus
inner join request on LatestStatus.requestid=Request.RequestID
inner join Request on Request.RequestID=Request.RequestID
inner join HistoryItem on HistoryItem.HistoryItemRequestID=Request.[RequestID]
inner join User on UserID=RequestUser
inner join [user] on [user].UserID=User.userid
inner join WorkFlow on WorkFlowId=RequestWorkFlowID
inner join BusinessUnit on BUID=BusinessUnitId
inner Join Products on WorkFlow.ProductID= Products.ProductID
where
(RequestStatusID=@StatusId or @StatusId=-1)and
(workflow.productID=@ProdId or @ProdId=-1)
and (WorkFlow.buid=@RequestBusinessUnitId or @RequestBusinessUnitId=-1)
and (Request.RequestID = @RequestNumber or @RequestNumber = -1)
and (@User = '' or [User].UserName like '%'+ replace(@User, '*', '%') + '%' or exists (select distinct RequestID from requestuser inner join [User] on [User].userid = requestuser.userid where requestuser.requestID = Request.RequestID and [User].UserName like '%'+ replace(@User, '*', '%') + '%' ))
group by Request.RequestID,RequestStatusID,RequestStatusName,
BusinessUnitName,
RequestWorkFlowID,
RequestDate,RequestHFMApplicationID ,[User].UserName ,User.UserId,[User].UserEmail
,Request.RequestType,workflow.productID,productname
ORDER BY
(
CASE LOWER(@SortExp)
WHEN 'requestuser' THEN LOWER([User].[UserName])
WHEN 'requestbu' THEN LOWER(BusinessUnitName)
WHEN 'requeststatus' THEN LOWER(RequestStatusName)
WHEN 'requestproduct' THEN LOWER(productname)
WHEN 'requestapplication' THEN LOWER(CAST (RequestHFMApplicationID AS VARCHAR) COLLATE SQL_Latin1_General_CP1_CI_AS)
when 'requesttype' THEN
(
CASE LOWER([User].[UserName])
WHEN 'Multi User' then 'Bulk'
ELSE 'Single'
END
)
END
),
(
CASE LOWER(@SortExp)
WHEN 'requestdate' THEN RequestDate
END
),
(
CASE LOWER(@SortExp)
WHEN 'requestid' THEN Request.RequestID
END
)