mysql 索引 索引條件下推 ICP

2021-10-05 05:27:56 字數 969 閱讀 9762

索引條件下推(icp), index condition pushdown,簡單的來講,使用索引查詢後,不立即進行回表查詢,通過where條件中的字段(該字段也是位於索引中)進行過濾,將過濾之後的結果進行回表查詢。相對於沒有開啟icp,減少了回表查詢的記錄數

來自官網

假設乙個表包含有關人員及其位址的資訊,並且該錶的索引定義為index(zipcode,lastname,firstname)。如果我們知道乙個人的zipcode值但不確定姓氏,我們可以這樣搜尋:

select

*from people

where zipcode=

'95054'

and lastname like

'%etrunia%'

and address like

'%main street%'

;

mysql可以使用索引來掃瞄zipcode=『95054』的人。第二部分(姓氏like』%etrunia%』)不能用於限制必須掃瞄的行數,因此如果沒有icp,此查詢必須為所有擁有zipcode ='95054』的人檢索完整的錶行。

使用icp後,mysql在讀取整個錶行之前檢查姓氏like』%etrunia%'部分。這樣可以避免讀取與zipcode條件匹配的索引元組對應的完整行,但不會讀取lastname條件

預設情況下啟用索引條件下推。可以使用optimizer_switch系統變數通過設定index_condition_pushdown標誌來控制:

set optimizer_switch =

'index_condition_pushdown=off'

;set optimizer_switch =

'index_condition_pushdown=on'

;

Mysql知識延展(三)索引條件下推

索引條件下推 icp icp index condition pushdown 是mysql利用索引 二級索引 元組和篩選欄位在索引中的where條件從表中提取資料記錄的一種優化操作。icp的思想是 儲存引擎在訪問索引的時候檢查篩選欄位在索引中的where條件 pushed index condit...

索引條件下推優化(ICP)

索引條件下推是對使用索引從表中檢索行的一種優化。如果不使用icp,儲存引擎先遍歷索引然後去基表中去定位所需要的行,並將其返回給mysql伺服器,然後伺服器進行where條件的過濾。使用到icp後,如果where的部分列可以僅使用索引中的列來過濾,則mysql伺服器會將這部分條件下推到儲存引擎,儲存引...

SQL 之 ICP 索引條件下推

正式講 icp 之前了,我們先將相關的概念捋一捋,知道的就當回顧,不知道的就當了解了,這有助於對 icp 的理解 建個示例表 tbl index create table tbl index c1 int,c2 int,c3 char 1 primary key c1 key idx c2 c2 如...