在MySQL中,,一個查詢的執行成本是由I/O成本和CPU成本組成的,對于InnoDB存盤引擎來說,讀取一個頁面的I/O成本默認是1.0,讀取以及檢測一條記錄是否符合搜素條件的成本默認是0.2,
在單表查詢中,優化器生成執行計劃的步驟一般如下,
- 步驟1.根據搜索條件,找出所有可能使用的索引,
- 步驟2.計算全表掃描的代價,
- 步驟3.計算使用不同索引執行查詢的代價,
- 步驟4.對比各種執行方案的代價,找出成本最低的那個方案,
在優化器生成執行計劃的程序中,需要依賴一些資料,這些資料可能是使用下面兩種方式得到的:
index dive:通過直接訪問索引對應的B+樹來獲取資料,- 索引統計資料:直接依賴對表或者索引的統計資料,
為了更準確地計算連接查詢的成本,會采用某些規則來預測驅動表的扇出值,
連接查詢總成本=單次訪問驅動表的成本+驅動表扇出值*單次訪問被驅動表的成本
對于左連接和右連接來說,它們的驅動表是固定的,所以只需要分別為驅動表和被驅動表選擇成本最低的訪問方法,就可以找到最優的查詢方案,
對于內連接來說,為了生成成本最低的執行計劃,需要考慮兩方面:
- 選擇最優的表連接順序,
- 為驅動表和被驅動表選擇成本最低的訪問方法,
我們可以通過手動修改mysql資料庫下
engine_cost表或者server_cost表中的某些成本常數,更精準地控制在生成執行計劃是的成本計算程序,
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/264883.html
標籤:其他
上一篇:MySQL查漏補缺(一)基礎知識
下一篇:MySQL的全域鎖和表級鎖
