Sql-Server

為什麼優化器不選擇最優計劃

  • April 24, 2015

我知道,如果沒有更新統計資訊,優化器可能沒有選擇最佳執行計劃?

是否存在任何其他原因/原因?

第一個優化器採用最好的計劃之一——不是最好的。這是因為當優化器工作時,計算最佳計劃的時間可能比它在執行期間節省的時間長。是的,優化器基於統計數據工作。因此,如果您的統計數據足夠老,優化器將創建適合該統計數據的計劃 - 即在上次重新計算統計數據的那一刻。據我所知,該計劃還取決於您擁有的數據量。

優化器努力得到一個“足夠好”的計劃,但這並不總是最優的。

一個非常常見的原因是查詢過於復雜。將其分解為幾個查詢有助於優化器選擇更好的計劃。

在某些情況下,表上的索引過多也會導致這種情況,因為優化器可能會使用不是最好的索引,因為正如我們所說,它不會尋找最佳計劃,而是尋找足夠好的計劃.

其他原因可能是使用局部變數(優化器不知道它們的值)、非 SARGABLE 參數、缺少索引、提示和計劃指南使用不當等等。

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