什么是索引下推优化?

索引条件下推优化(Index Condition Pushdown,ICP)是MySQL 5.6 引入的一项用于优化数据查询的功能。

在不使用索引条件下推优化时,存储引擎通过索引检索到数据,然后将数据返回给 MySQL 服务器,然后 MySQL 服务器再对返回的数据进行过滤条件的判断。

而当使用索引条件下推优化时,如果存在某些被索引的列的判断条件,MySQL 服务器会将这部分条件下推给存储引擎。存储引擎根据这些条件判断索引是否符合 MySQL 服务器传递的条件,只有当索引符合条件时,才会将数据检索出来返回给 MySQL 服务器。

举个例子,假设有一张表,并为其创建了一个联合索引(name, age)。执行以下查询语句:SELECT * FROM t_user WHERE name LIKE '张%' AND age = 10;。由于 name 使用了范围查询,根据最左匹配原则:

在不使用 ICP 的情况下,存储引擎层会找到满足 name LIKE '张%' 条件的数据,然后将数据返回给服务器层,服务器层再根据条件 age = 10 进行过滤。这样就需要进行两次回表操作,浪费了联合索引中的另一个字段 age

然而,使用了索引条件下推优化后,将 WHERE 条件下推到存储引擎层执行,直接根据 name LIKE '张%' AND age = 10 的条件进行过滤。这样就可以减少回表的次数。

索引条件下推优化可以降低存储引擎查询基础表的次数,同时减少 MySQL 服务器从存储引擎接收数据的次数。

标签: java, Java面试题, MySQL, Java问题合集, MySQL面试题, Java编程, Java问题精选, Java常见问题