MySQL Index Condition Pushdown(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條件進行過濾。
Index Condition Pushdown (ICP)是MySQL 5.6 版本中的新特性,是一種在儲存引擎層使用索引過濾資料的一種最佳化方式。
a 當關閉ICP時,index 僅僅是data access 的一種訪問方式,儲存引擎透過索引回表獲取的資料會傳遞到MySQL Server 層進行where條件過濾。
b 當開啟ICP時,如果部分where條件能使用索引中的欄位,MySQL Server 會把這部分下推到引擎層,可以利用index過濾的where條件在儲存引擎層進行資料過濾,而非將所有透過index access的結果傳遞到MySQL server層進行where過濾.
最佳化效果:ICP能減少引擎層訪問基表的次數和MySQL Server 訪問儲存引擎的次數,減少io次數,提高查詢語句效能。
ICP 開啟時 ,MySQL將在儲存引擎層 利用索引過濾資料,減少不必要的回表,注意 虛線的using where 表示如果where條件中含有沒有被索引的欄位,則還是要經過MySQL Server 層過濾。
ICP的使用限制:
1 當sql需要全表訪問時,ICP的最佳化策略可用於range, ref, eq_ref, ref_or_null 型別的訪問資料方法 。
2 支援InnoDB和MyISAM表。
3 ICP只能用於二級索引,不能用於主索引。
4 並非全部where條件都可以用ICP篩選。
如果where條件的欄位不在索引列中,還是要讀取整表的記錄到server端做where過濾。
5 ICP的加速效果取決於在儲存引擎內透過ICP篩選掉的資料的比例。
6 5.6 版本的不支援分表的ICP 功能,5.7 版本的開始支援。
7 當sql 使用覆蓋索引時,不支援ICP 最佳化方法。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15498/viewspace-2221758/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【Mysql】MySQL · 特性分析 · Index Condition Pushdown (ICP)MySqlIndex
- mysql 5.6引入index condition pushdownMySqlIndex
- Index Condition Pushdown測試Index
- Using index condition Using indexIndex
- Mysql——index(索引)使用MySqlIndex索引
- MySQL index hints 使用MySqlIndex
- MySQL MRR和ICP介紹MySql
- MySQL:關於ICP特性的說明(未完)MySql
- 學習MYSQL之ICP、MRR、BKAMySql
- mysql中雜湊索引的使用限制MySql索引
- mysql oder by 使用index一例MySqlIndex
- <MYSQL Index>MySqlIndex
- mysql 索引( mysql index )MySql索引Index
- mysql的Covering IndexMySqlIndex
- MySQL InnoDB表的限制MySql
- MySQL 多表更新的限制MySql
- MYSQL中的type:index 和 Extra:Using indexMySqlIndex
- oracle對字元型別的列上線上重建index的限制!Oracle字元型別Index
- 【MySql】mysql 欄位個數的限制MySql
- mysql中的表大小限制MySql
- mysql loose index scan的實現MySqlIndex
- condition的作用
- 【Mysql】index extensions介紹MySqlIndex
- mysql (ICP) 索引條件下推對比ORACLE進行說明MySql索引Oracle
- 查詢使用表空間的TABLE,INDEX,INDEX SUBPARTITIONIndex
- Index of /Downloads/MySQL-5.5/IndexMySql
- LOCAL INDEX和HINT的使用【DO BE USED LOCAL INDEX IN HINT】薦Index
- 簡單談談MySQL的loose index scanMySqlIndex
- 同步控制和鎖,ReenterLock和Condition的詳細使用
- oracle中sequence使用的限制Oracle
- ICP證和EDI證的區別
- MySQL中為什麼要使用索引合併(Index Merge)?MySql索引Index
- MySql 限制連線程式數MySql線程
- [20230908]Oracle Index Range Scan with LIKE Condition on Wildcard '_'.txtOracleIndex
- mysql 8.0.11 資料庫使用者密碼修改詭異的限制MySql資料庫密碼
- 監控index 的使用情況Index
- 監視index的使用情況Index
- Java多執行緒11:ReentrantLock的使用和ConditionJava執行緒ReentrantLock