Sql-Server

這個非常低的行估計是否會導致插入緩慢?

  • September 29, 2021

參考:https ://www.brentozar.com/pastetheplan/?id=Bklc3fGNt

錯誤估計

我在#LargerRange 和#SmallerRange 上都有一個聚集索引。這些索引包含 5 個關鍵列:Name、InOrOut、LocCode、VisitID 和 AccountNumber

$$ in that order $$. 除了位於兩個計算標量之間的 Merge Join 運算符之外,大多數估計看起來都不錯。這個特定的運算符返回約 53,000% 的估計行。緊隨其後的運算符(Concat 和 Table Insert)的估計也很差,但沒有那麼差。儘管如此,這個插入本身大約需要一兩分鐘,而且這並沒有像在生產中那樣處理盡可能多的行。 我對為什麼那個特定的運算符大大低估了行數感到有些困惑。第一個錯誤估計是否會導致以下估計也有偏差?這是否會減慢插入速度(這是一個選擇;插入到表中 + with(tablock) 具有聚集索引的性能也很差)?為什麼這個估計如此糟糕,我該如何改進它?我懷疑它與聚集索引中鍵列的順序有關,但我覺得我只是錯過了一些東西,因為我基本上被難住了。非常感謝任何建議。謝謝你。

看起來不像。該操作員的時間統計數據並沒有顯示它執行了很長時間,

<RunTimeCountersPerThread Thread="0" ActualRows="2302947" Batches="0" ActualEndOfScans="1" ActualExecutions="1" ActualExecutionMode="Row" ActualElapsedms="5417" ActualCPUms="5406" />

並且大部分時間用於將 2,302,947 行插入臨時表。

你期望有那麼多行嗎?計劃中的查詢被截斷,所以我們只能看到 UNION ALL 中的前兩個查詢。

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