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 欄位...