回表

查询时一些字段值拿不到,需要到主键索引B+树再查一次。

根据索引进行条件查询,回到主键索引树进行搜索的过程

图片

因为查询还要回表一次,再次查询主键索引树,所以实际中应该尽量避免回表的产生。

解决回表问题可以建立联合索引进行索引覆盖,如图所示根据name字段查询用户的name和sex属性出现了回表问题:

图片

那么我们可以建立下面这个联合索引来解决:

1
2
3
4
5
6
create table user (
id int primary key,
name varchar(20),
sex varchar(5),
index(name, sex)
) engine = innodb;

建立了如上所示的index(name,sex)联合索引,在二级索引的叶子结点的位置就会同时也出现sex字段的值,因为能够获取到要查询的所有字段,因为就不用再回表查询一次。

强制索引

force index