[英]Performance Issue due to join in SQL
我在使用左連接(3 分鍾)時需要花費更多時間來獲取數據的問題。 但是當嘗試使用內部連接時,它只需要不到 20 秒。 由於內連接消除了相應表中沒有數據的其他記錄,因此我無法獲取所有記錄。 請幫助解決這個問題。
詢問:
SELECT UserName, UserEmail, UserLeaveReason FROM [dbo].[UserData] UD WITH (NOLOCK)
INNER JOIN #vw_User REQ on UD.UserID= REQ.UserID
LEFT JOIN Txn_UserLeaveDetails TD ON TD.RELREQID = REQ.RELREQID AND TD.IsActive = 1
LEFT JOIN MST_LeaveDescription TS ON TS.LeaveDescriptionId = TD.LeaveDescriptionId
Txn_UserLeaveDetails :包含用戶的休假詳情,可以是活躍的和不活躍的(過去的休假)。 對於這個查詢,我只需要當前葉子的數據。
**Txn_UserLeaveDetails**
RELREQID
UserID
LeaveStartDate
LeaveEndDate
CreatedDate
CreatedBy
UpdatedDate
UpdatedBy
IsActive
MST_LeaveDescription :此表給出了離開原因的描述。
**MST_LeaveDescription**
LeaveDescriptionId
LeaveReason
CreatedDate
UpdateDate
在上面的查詢輸出中,我需要所有用戶數據,而不管他們的休假狀態如何。 但是使用上面的查詢需要 3 分鍾。 但是,當我將 MST_LeaveDescription 的連接更改為內部連接時,只需 20 秒。 但在這種情況下,我讓用戶休假。
請幫忙,
提前致謝。
create table #UserLeave
(
UserId int index idxUserId,
UserLeaveReason varchar(200)
)
--get active leaves
insert into #UserActiveLeave(UserId, UserLeaveReason)
select TD.UserID, TS.LeaveReason
from Txn_UserLeaveDetails TD
join MST_LeaveDescription TS on TD.LeaveDescriptionId = TS.LeaveDescriptionId
where TD.IsActive = 1;
--get the rest of the users without active leaves
insert into #UserActiveLeave(UserId)
select UserID
from [dbo].[UserData]
except
select UserId
from #UserActiveLeave;
--result
select ud.UserName, ud.UserEmail, ua.UserLeaveReason
from #UserActiveLeave as ua
join [dbo].[UserData] as ud on ua.UserId = ud.UserId;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.