- 覆盖索引:就是能够一次从索引树上获取需要的字段信息。
比如说我给name建一个索引,然后我要查询张三同学的id,因为name和id在name的索引树上,所以查询一次就能获取到张三同学的id。
- 回表:就是不能一次从索引树上获取需要的字段信息,还需要再去主键索引上查询一次。
比如说我要查询张三同学的age,这种情况下首先去name索引上查询,发现name索引树上没有age信息。所以我只能先根据name查出张三同学的id,再根据张三同学的id去主键索引上查询出张三同学的age信息,这种一次查询不到,还需要回到主键索引再查询一次,这就叫回表。
开发建议
我们需要尽可能避免回表。
比如刚才的回表的例子,我可以扩展索引,将name索引扩展成name+age联合索引,这样根据name查询的时候就可以查到age了,完成索引覆盖后,也就不需要回表。
在开发中,如果想验证是否完成了索引覆盖,可以使用explain,如果扩展信息中有using index,说明发生了索引覆盖