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

2021-09-28 22:54:52 字數 1962 閱讀 6814

索引條件下推(icp)

icp(index condition pushdown)是mysql利用索引(二級索引)元組篩選欄位在索引中的where條件從表中提取資料記錄的一種優化操作

icp的思想是:儲存引擎在訪問索引的時候檢查篩選欄位在索引中的where條件(pushed index condition,推送的索引條件),如果索引元組中的資料不滿足推送的索引條件,那麼就過濾掉該條資料記錄。icp(優化器)盡可能的把index condition的處理從server層下推到storage engine層。storage engine使用索引過濾不相關的資料,僅返回符合index condition條件的資料給server層。也是說資料過濾盡可能在storage engine層進行,而不是返回所有資料給server層,然後後再根據where條件進行過濾。

使用icp(mysql 5.6版本以前)和沒有使用icp的資料訪問和提取過程如下:

優化器沒有使用icp時,資料訪問和提取的過程如下:

當storage engine讀取下一行時,首先讀取索引元組(index tuple),然後使用索引元組在基表中(base table)定位和讀取整行資料。

server層評估where條件,如果該行資料滿足where條件則使用,否則丟棄。

迴圈執行1,直到最後一行資料。

優化器使用icp時,server層將會把能夠通過使用索引進行評估的where條件下推storage engine層。資料訪問和提取過程如下:

storage engine從索引中讀取下一條索引元組。

storage engine使用索引元組評估下推的索引條件。如果沒有滿足where條件,storage engine將會處理下一條索引元組(回到上一步)。只有當索引元組滿足下推的索引條件的時候,才會繼續去基表中讀取資料

如果滿足下推的索引條件,storage engine通過索引元組定位基表的行和讀取整行資料並返回給server層

server層評估沒有被下推到storage engine層的where條件,如果該行資料滿足where條件則使用,否則丟棄。

索引條件下推的意思就是篩選欄位在索引中的where條件server層下推到storage engine層,這樣可以在儲存引擎層過濾資料。由此可見,icp可以減少儲存引擎訪問基表的次數mysql server訪問儲存引擎的次數。

icp使用的條件

icp優化功能的開啟與關閉

index_condition_push優化功能,預設開啟

mysql5.6可以通過設定optimizer_switch([global|session],dynamic)變數開啟或者關閉

mysql >set optimizer_switch=』index_condition_pushdown=on|off』

用explain檢視執行計畫時,如果執行計畫中的extra資訊為「using index condition」,表示優化器使用的icp。

mysql 索引 索引條件下推 ICP

索引條件下推 icp index condition pushdown,簡單的來講,使用索引查詢後,不立即進行回表查詢,通過where條件中的字段 該字段也是位於索引中 進行過濾,將過濾之後的結果進行回表查詢。相對於沒有開啟icp,減少了回表查詢的記錄數 來自官網 假設乙個表包含有關人員及其位址的資...

mysql索引在in條件下失效的原因

1.如果索引欄位是字串,則必須在字段值外加上引號,如 select from notice where villageid in 0 4100000 1.如果資料量很小,mysql會認為掃瞄全表比使用索引快,自然不會使用索引.2.如果查詢結果資料量很多,mysql也不會使用索引.比如style 欄位...

索引在哪些條件下會失效

is null 或is not null操作 判斷字段是否為空 判斷字段是否為空一般是不會應用索引的,因為b樹索引是不索引空值的。select from mtl material transactions mmt where mmt.shipment number is not null 及 操作符...