天天看點

8.9 Controlling the Query Optimizer

8.9 Controlling the Query Optimizer

8.9.1 Controlling Query Plan Evaluation

8.9.2 Controlling Switchable Optimizations

8.9.3 Index Hints

MySQL 提供優化控制通過系統變量, 影響查詢計劃的評估,控制優化器和index hints.

8.9.1 Controlling Query Plan Evaluation 控制查詢計劃評估

查詢優化器的任務是找出一個合适的執行計劃來執行一個SQL查詢,

因為好的執行計劃和差的執行計劃性能上是數量級的差别,

很多的查詢計劃, 包括了MySQL,包括或者或少的詳見的搜尋一個最優的方案在多有可能的查詢評估方案中。

對于一個join 查詢, 對于一個關聯查詢,對于小資料表(通常小于7到10)這不是一個問題。然而,當較大的查詢被送出時,在查詢優化所花費的時間可能會很容易成為在伺服器的性能的主要瓶頸。

一個更加複雜的方法用于查詢優化器啟用使用者來控制來搜尋最佳的查詢計劃。

一般的方法是更少的時間花費在編譯一個查詢, 換句話說, 因為優化器跳過一些計劃,

它可能會錯過找到一個最優的計劃。

optimizer_prune_level 變量告訴優化器來跳過某些計劃基于被通路記錄的評估。

我們的經驗顯示這種類型的有根據的猜測很少錯誤最優的執行計劃,

并可能打打減少查詢編譯時間。這就是為什麼預設是(optimizer_prune_level = 1),

然而,如果你确信優化器錯過了一個更好的計劃,這個選項可以被關掉(optimizer_prune_level=0)

這樣編譯查詢可能需要花費很長的時間。