MRR 「Multi-Range Read」初步理解 對where條件拆分,減少通過索引查到過多無用的數(shù)據(jù);查詢索引頁葉子節(jié)點的主鍵ID后不是直接讀取數(shù)據(jù),而是把滿足條件的主鍵ID進行排序,然后在進行數(shù)據(jù)查找。
10年積累的成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計經(jīng)驗,可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認識你,你也不認識我。但先網(wǎng)站設(shè)計后付款的網(wǎng)站建設(shè)流程,更有煙臺免費網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
MySQL 5.6開始支持Multi-Range Read(MRR)優(yōu)化。目的是為了減少磁盤的隨機訪問,并且將隨機訪問轉(zhuǎn)化為較為順序的數(shù)據(jù)訪問,這對IO-bound類型的SQL查詢語句可帶來性能極大的提升。MRR優(yōu)化可適用于rangeref,eq_ref類型的查詢
MRR優(yōu)化的好處:
a)MRR使數(shù)據(jù)訪問變得較為順序。在查詢輔助索引時,首先根據(jù)得到的查詢結(jié)果按照主鍵進行排序,并按照主鍵排序的順序進行書簽查找
b)減少緩沖池中頁被替換的次數(shù)
c)批量處理對鍵值的查詢操作
對于InnoDB和MyISAM存儲引擎的范圍查詢和JOIN查詢操作,MRR工作方式如下
a)將查詢得到的輔助索引鍵值存放在一個緩存中,這是緩存中的數(shù)據(jù)是根據(jù)輔助索引鍵值排序的
b)將緩存中的鍵值根據(jù)RowID進行排序
c)根據(jù)RowID的排序順序來訪問實際的數(shù)據(jù)文件
Index Condition Pushdown (ICP)是MySQL用索引去表里取數(shù)據(jù)的一種優(yōu)化。如果禁用ICP,引擎層會穿過索引在基表中尋找數(shù)據(jù)行,然后返回給MySQL Server層,再去為這些數(shù)據(jù)行進行WHERE后的條件的過濾。ICP啟用,如果部分WHERE條件能使用索引中的字段,MySQL Server 會把這部分下推到引擎層。存儲引擎通過使用索引條目,然后推索引條件進行評估,使用這個索引把滿足的行從表中讀取出。ICP能減少引擎層訪問基表的次數(shù)和MySQL Server 訪問存儲引擎的次數(shù)。
ICP 「Index Condition Pushdown」初步理解在通過輔助索引查詢時進一步過濾where其他條件,前提是where條件的數(shù)據(jù)在該索引中可以獲取到。
備注個人理解,這兩種優(yōu)化前提都依賴索引,ICP依賴的是聯(lián)合索引。