【Mysql】查詢優化
阿新 • • 發佈:2021-01-10
Mysql查詢優化
- 基於成本
-
- I/O成本
- CPU成本
- join
-
- 連線原理
基於成本
Mysql執行一個查詢可以有不同的執行方案,它會選擇其中成本最低的方案.
主要計算的就是:
- 全表掃描成本
- 針對每個索引計算不同的訪問方式的成本
成本其中包括 I/O成本和CPU成本
InnoDB儲存引擎規定 讀取一個頁面花費的成本預設是1.0(I/O成本),讀取以及檢測一條記錄是否符合搜素條件的成本為0.2(CPU成本).
如果是計算輔助索引成本 還會加上 回表成本(因為輔助索引的葉子結點存的是主鍵而不是真實資料).
I/O成本
InnoDB儲存引擎都是將資料和索引都儲存到磁碟上的,當我們想查詢表中的記錄時,需要先把資料或者索引載入到記憶體中然後再操作。這個從磁碟到記憶體這個載入的過程損耗的時間稱之為I/O成本。
CPU成本
讀取以及檢測記錄是否滿足對應的搜尋條件 對結果集進行排序等這些操作損耗的時間為CPU成本
join
連線原理
連線的大致原理:
- 選取驅動表,使用與驅動表相關的過濾條件,選取代價最低的訪問形式來執行對驅動表的單表查詢
- 對上一步驟中查詢驅動表得到的結果集中的每一條記錄,都分別到被驅動表中查詢匹配的記錄
對應的虛擬碼:
for each row in t1{
//遍歷滿足對t1單表查詢結果集中的每一條記錄
for each row in t2{
//對某條t1表的記錄來說,遍歷滿足對t2單表查詢結果集中的每一條記錄
}
}