我有一個簡單的SQL查詢(見下文),長期運行下去(我無法等待其完成)存在()條件下的性能問題
if exists(
select 1
from [files].[Contacts_Migration_Template] c
where not exists(select 1
from [files].[Additional_Contact_Migration_Template]
where contact = c.[migration id])
) print 'warning message'
但子查詢(如果存在(子查詢)打印 '警告信息')本身是立即執行(見下面的截圖)
「全」 查詢
子查詢
產生的預估執行計劃(見下文)兩個查詢表明,子查詢必須比「完全」查詢更高查詢成本......其中,正如我上面說的,第一(子查詢)立即運行,第二個( 「全」)無限長的運行...
這是怎麼回事?
原始查詢
快一個使用哈希聯接,只掃描'Additional_Contact_Migration_Template'一次。慢速掃描它(或至少是一個假脫機複製)多次。統計信息是否最新? – 2013-05-09 08:28:13
,但爲什麼第一個相對查詢的成本是83%(對比17%),如果它更快? – 2013-05-09 08:31:08
這是基於估計是錯誤的。它可能假定嵌套循環的內部執行次數將比實際發生的小得多。實際上可能是[行目標走向流氓](http://dba.stackexchange.com/questions/18637/unexpected-scans-during-delete-operation-using-where-in/18746#18746)。 – 2013-05-09 08:32:14