模糊匹配like 優化 索引條件下推ICP

2021-10-22 22:13:40 字數 598 閱讀 5735

mysql 5.6開始支援icp(index condition pushdown),不支援icp之前,當進行索引查詢時,首先根據索引來查詢資料,然後再根據where條件來過濾,掃瞄了大量不必要的資料,增加了資料庫io操作。

icp:全稱為index condition pushdown,是mysql 5.6引入的一項優化策略。簡單的來說就是將本該在mysql進行過濾的條件下推到innodb引擎層去做。但是這種策略和我們平時說的使用到了索引實際上是不同的,我們平時說的用到了索引一般指的是使用到了索引進行定位和訪問,但是這裡卻是一種過濾操作。嚴格意義上來講和mysql層的過濾區別並不大,但是由於這裡過濾發生在innodb層,並且還沒有進行回表和加行鎖操作(for update),

在某些查詢下,可以減少server層對儲存引擎層資料的讀取,從而提供資料庫的整體效能。因此

優點有如下幾點:

icp相關控制引數

index_condition_pushdown:索引條件下推預設開啟,設定為off關閉icp特性

索引條件下推優化(ICP)

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

索引在哪些條件下會失效

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

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

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