一萬億嘗試加入,而不是條款。嘗試下面的一個,它可能會幫助你。
Update r
Set EDR_IsLock = @il
From RED As r
Join
(
Select a.DocID
From ( Select Distinct DocID
From UVD
Join inserted i On UVD.UVID = i.UVID
) a
left outer join
(
Select Distinct
UVD.DocID
From UVD
join UVH on UVD.UVID = UVH.UVID
Where UVD.UVID Not In (Select i.UVID From inserted i)
And UVH.IsLock = 1
) b on a.DocID = b.DocID
Where b.DocID is null
) As t On r.docid = t.DocID
更新:
我不是一個很好的解釋器,但是,如果「不存在」做出的,而不是「在條款」顯着性差異,那麼我會重寫上述查詢,如下所示:
Set Nocount On;
Declare @UVD Table
(
DocID Int
)
Declare @UVDWithUVH Table
(
DocID Int
)
Insert Into @UVD(DocID)
Select Distinct
DocID
From UVD As u With (Nolock)
Join inserted i On u.UVID = i.UVID
Insert Into @UVDWithUVH(DocID)
Select Distinct
u.DocID
From UVD As u With (Nolock)
Join UVH As uh With (Nolock) on u.UVID = uh.UVID
Where Not Exists (Select 1 From inserted As i Where i.UVID = u.UVID)
And uh.IsLock = 1
Update r
Set EDR_IsLock = @il
From RED As r
Join
(
Select a.DocID
From @UVD As a
Left Outer Join @UVDWithUVH As b On a.DocID = b.DocID
Where b.DocID Is Null
) As t On r.docid = t.DocID
在這個解決方案中,我建議使用@Table變量,它將駐留在RAM中而不是物理存儲器中。在Join時刪除查詢內部查詢的開銷。
嘗試此更新之一,並想知道,它是否有助於您提高觸發器的性能。
這是觸發器嗎? – lad2025
你試過在SSMS中執行它嗎?您可以嘗試並檢查執行計劃以獲取提示。 – Paolo
@ lad2025是的,這是在觸發 –