目录
索引条件下推(index condition pushdown,简称ICP)
索引合并优化(Index merge optimization)
前言
索引扫描:
- 存储引擎通过检索索引查询索引数据(主要是查询基表中数据的id)。
索引过滤:
- 存储引擎通过检索索引查询索引数据(主要是查询基表中数据的id),如果查询条件中的部分字段也是该索引的字段时,存储引擎会对针对这部分字段对索引数据进行过滤。
回表:
- 存储引擎(存储引擎层)通过二级索引拿到主键id之后,去遍历主键索引,然后从文件系统(文件系统层)来获取数据的过程就叫做回表。
索引条件下推(index condition pushdown,简称ICP)
官网:
概念:
- ICP就是把索引过滤放在存储引擎层来执行,目的是减少返回给服务层的数据量。
- 下推:就是将“索引过滤”由服务层下推到存储引擎层来执行。
- mysql5.6中开始引入ICP,ICP适用于 INNODB 和 MYISAM 存储引擎。
原理:
不使用ICP:
- 在使用二级索引进行查询时,存储引擎通过索引获取到id后,通过回表将数据查询出来并上推到服务层,然后服务层对这些数据进行条件过滤并返回给客户端。
使用ICP:
- 在使用二级索引进行查询时,如果二级索引中包含了查询条件中的部分字段,那么存储引擎通过索引获取到id后,会对针对这部分字段对索引数据进行过滤,然后使用过滤后的id通过回表将数据查询出来并上推到服务层,然后服务层对这些数据进行剩余的条件过滤并返回给客户端。
优点:
- 减少回表的次数。
- 减少了上推到服务层的数据。
索引合并优化(Index merge optimization)
概念:
5.0版本开始,查询语句可以同时使用多个索引:先分别使用单个索引去查询数据,然后将多个索引查询出来的数据取取交集或并集。