【Mysql】查詢優化

基於成本

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單表查詢結果集中的每一條記錄
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章