Sql-Server

優化按計劃產生超過 5000 億行的查詢 - 實際結果只有 40 萬行

  • December 3, 2019

我正在嘗試提高數據庫性能。我注意到一個查詢,根據計劃它會產生很多行,但我知道事實上插入後表中的行不超過 400k。為什麼實際計劃和查詢結果相差這麼大?查詢計劃在這裡https://www.brentozar.com/pastetheplan/?id=rJWX327pB

我不明白為什麼查詢如此復雜。

從已發布計劃中獲取的查詢文本:

with Object1 as
(
select Object2.Column1 as Column2 
from Schema1.Object3 as Object2 
left outer join Schema1.Object4 as Object5 
   on Object2.Column1 = Object5.Column1
where Object5.Column1 is null
) 
insert into Schema1.Object4 
select * from Schema1.Object3 
where Column1 in ( select Column2 
                  from Object1 )

讓我們想想。

你在 CTE 做什麼?您從中選擇Schema1.Object3沒有相應記錄的記錄Schema1.Object4

主查詢中插入了哪些記錄?那些在 CTE 中被選中的。

所以CTE似乎是多餘的,查詢可能會簡化為

insert into Schema1.Object4 
select Schema1.Object3.* 
from Schema1.Object3 
left outer join Schema1.Object4
   on Schema1.Object3.Column1 = Schema1.Object4.Column1
where Schema1.Object4.Column1 is null

或者

insert into Schema1.Object4 
select Schema1.Object3.* 
from Schema1.Object3 
where not exists ( select 1
                  from Schema1.Object4
                  where Schema1.Object3.Column1 = Schema1.Object4.Column1 )

請檢查 - 我是對的嗎?

引用自:https://dba.stackexchange.com/questions/254640