ICP(Index Condition Pushdown),索引條件下推是Mysql針對(duì)使用索引檢索時(shí)的一種優(yōu)化手段防嗡。索引下推中下推的是where中有關(guān)索引的條件
,由服務(wù)層下推到存儲(chǔ)引擎層
侠坎,使之返回更小的數(shù)據(jù)行到服務(wù)層蚁趁。
一、不使用ICP場景
1)存儲(chǔ)引擎遍歷table t
的索引实胸,對(duì)每一個(gè)索引執(zhí)行后續(xù)操作他嫡;
2)根據(jù)索引從table t
中取出行(如果是二級(jí)索引需要回表),返回服務(wù)器庐完;
3)服務(wù)器通過where條件中針對(duì)table t
的條件來過濾行钢属;
二、使用ICP場景
1)存儲(chǔ)引擎遍歷table t
的索引门躯,對(duì)每一個(gè)索引執(zhí)行后續(xù)操作淆党;
2)存儲(chǔ)引擎根據(jù)where中針對(duì)table t
條件中當(dāng)前索引列的查詢條件,對(duì)索引進(jìn)行檢查讶凉,
- 如果滿足染乌,則根據(jù)索引從
table t
中取出行并將其返回至mysql服務(wù)器層,繼續(xù)執(zhí)行后續(xù)操作 - 否則懂讯,返回第1)步獲取下一個(gè)索引荷憋;
3)服務(wù)器根據(jù)剩余的條件過濾引擎返回的數(shù)據(jù)行;
優(yōu)點(diǎn):
1)減少存儲(chǔ)引擎訪問表的次數(shù)域醇;
2)減少mysql服務(wù)器訪問存儲(chǔ)引擎的次數(shù)台谊;