更新表中的值,如果數據沒有在表B中的以下UPDATE語句也正是我想要它做的事:SQL Server 2012中 - 嘗試使用JOIN
UPDATE [dbo].[Person]
SET [IsUpdated] = 0
FROM [Person] p
WHERE p.IsUpdated = 1
and p.PersonID NOT IN (SELECT DISTINCT q.PersonID FROM [DeletionQueue] d, [Queue] q
WHERE d.fkQueueID = q.QueueID)
然而,當我運行估計此聲明的執行計劃,我看到我的處理時間的70%被NOT IN SELECT語句消耗。我更願意使用某種JOIN語句來獲得相同的結果。
我試圖用許多不同的方式創建聲明,但最接近我已經能夠複製上述聲明是一個給我與我正在尋找的完全相反的結果(即如果我在Person表中有兩個人,IsUpdated = 1,這兩個人在隊列表(QueueID)中都有一個入口,但是隻有人B在DeletionQueue表(fkQueueID)中,那麼Person表中的人A的記錄應該只有IsUpdated更改爲0)。目前,當我嘗試一條JOIN語句時,人員B被更新並且人員A不被更新。
如果需要,我可以使用該語句,但在此應用程序中性能非常關鍵。有任何想法嗎?
在DeletionQueue.fkQueueID和Queue.QueueID列上有索引嗎? –
我在DeletionQueue.fkQueueID和Queue.QueueID列上都有索引。 – MyLilMulePepe