MySQL MRR和ICP介紹

chenfeng發表於2019-02-13

MRR 「Multi-Range Read」初步理解 對where條件拆分,減少透過索引查到過多無用的資料;查詢索引頁葉子節點的主鍵ID後不是直接讀取資料,而是把滿足條件的主鍵ID進行排序,然後在進行資料查詢。



MySQL 5.6開始支援Multi-Range Read(MRR)最佳化。目的是為了減少磁碟的隨機訪問,並且將隨機訪問轉化為較為順序的資料訪問,這對IO-bound型別的SQL查詢語句可帶來效能極大的提升。MRR最佳化可適用於rangeref,eq_ref型別的查詢


MRR最佳化的好處:


a)MRR使資料訪問變得較為順序。在查詢輔助索引時,首先根據得到的查詢結果按照主鍵進行排序,並按照主鍵排序的順序進行書籤查詢


b)減少緩衝池中頁被替換的次數


c)批次處理對鍵值的查詢操作


對於InnoDB和MyISAM儲存引擎的範圍查詢和JOIN查詢操作,MRR工作方式如下


a)將查詢得到的輔助索引鍵值存放在一個快取中,這是快取中的資料是根據輔助索引鍵值排序的


b)將快取中的鍵值根據RowID進行排序


c)根據RowID的排序順序來訪問實際的資料檔案



Index Condition Pushdown (ICP)是MySQL用索引去表裡取資料的一種最佳化。如果禁用ICP,引擎層會穿過索引在基表中尋找資料行,然後返回給MySQL Server層,再去為這些資料行進行WHERE後的條件的過濾。ICP啟用,如果部分WHERE條件能使用索引中的欄位,MySQL Server 會把這部分下推到引擎層。儲存引擎透過使用索引條目,然後推索引條件進行評估,使用這個索引把滿足的行從表中讀取出。ICP能減少引擎層訪問基表的次數和MySQL Server 訪問儲存引擎的次數。


ICP 「Index Condition Pushdown」初步理解在透過輔助索引查詢時進一步過濾where其他條件,前提是where條件的資料在該索引中可以獲取到。


備註個人理解,這兩種最佳化前提都依賴索引,ICP依賴的是聯合索引。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15498/viewspace-2629899/,如需轉載,請註明出處,否則將追究法律責任。

相關文章