Sql-Server
優化按計劃產生超過 5000 億行的查詢 - 實際結果只有 40 萬行
我正在嘗試提高數據庫性能。我注意到一個查詢,根據計劃它會產生很多行,但我知道事實上插入後表中的行不超過 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 )
請檢查 - 我是對的嗎?