1. 程式人生 > 實用技巧 >【Mysql】查詢優化

【Mysql】查詢優化

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單表查詢結果集中的每一條記錄
	}
}