1. chatGPT解釋
MySQL的索引下推(Index Condition Pushdown,ICP)是一種優(yōu)化技術(shù),它將WHERE子句中的條件下推到索引層級進行過濾,以減少數(shù)據(jù)庫服務(wù)器需要掃描的行數(shù),提高查詢性能。它能夠利用索引提供的額外信息進行優(yōu)化,盡可能地減少對表的訪問,因此在大型數(shù)據(jù)集上非常有用。
簡單來說,當(dāng)MySQL查詢時,它可以在讀取表之前對索引進行過濾,以排除不符合條件的行,這樣可以減少表掃描的次數(shù)和所需的IO操作。通過使用索引下推,MySQL可以更有效地處理WHERE子句和其他限制條件,并更快地返回結(jié)果。
總之,索引下推是MySQL數(shù)據(jù)庫的一種優(yōu)化技術(shù),能夠利用索引提供的額外信息進行優(yōu)化,盡可能減少對表的訪問,提高查詢性能。
2. 背景知識
2.1 回表查詢

mysql普通索引(二級索引)中存儲的是主鍵id,如果要查詢到表記錄,需要進行回表查詢。

2.2 索引下推
MySQL的索引下推(Index Condition Pushdown,ICP)是一種優(yōu)化技術(shù),它將WHERE子句中的條件下推到索引層級進行過濾,以減少數(shù)據(jù)庫服務(wù)器需要掃描的行數(shù),提高查詢性能。它能夠利用索引提供的額外信息進行優(yōu)化,盡可能地減少對表的訪問,因此在大型數(shù)據(jù)集上非常有用。
簡單來說,當(dāng)MySQL查詢時,它可以在讀取表之前對索引進行過濾,以排除不符合條件的行,這樣可以減少表掃描的次數(shù)和所需的IO操作。通過使用索引下推,MySQL可以更有效地處理WHERE子句和其他限制條件,并更快地返回結(jié)果。
對應(yīng)場景:
- 在開始之前先先準(zhǔn)備一張用戶表(user),其中主要幾個字段有:id、name、age、address。建立聯(lián)合索引(name,age)。
SELECT * from user where name like '陳%' and age=11
- 根據(jù) "最佳左前綴" 的原則,這里使用了聯(lián)合索引(name,age)進行查詢,但是僅使用到了name索引。

核心原理:將where條件篩選下推到二級索引檢索主鍵id時,以減少回表次數(shù)。