使用索引查询的不同情况(1. 聚合索引、2. 非聚合索引(2.1 非主键索引、2.2 除了非主键索引还包含非索引字段))
- 通过主键查询 : 当我们查询条件是通过主键查询的时候,因为主键是聚集索引,这时直接就在索引的叶子节点就可以拿到数据;
- 通过普通索引查询的时候,这里得分两种情况 :
- select * from table where 中 xx =‘’ 的字段刚好是索引字段的话,那么直接就可以在索引中找到对应的值,不需要"回表查询",直接返回结果。
- select * from table where xx = ‘’ 中xx字段包含除了普通索引以外的字段的话,那么就会通过该记录拿到叶子节点的主键信息,拿到主键信息后再去聚合索引中找到主键对应的行信息,这个过程就叫做回表查询。
什么是回表查询?
使用普通索引的情况下,并且包含了非索引字段的时候,会通过该普通索引获取到叶子节点的主键信息,拿到主键信息后再去聚合索引中找到对应的行信息,这个过程就叫做回表查询。
回表查询实战
explain select name from test;
这里看到这里只是单纯的使用了index。
explain select name from test where name='name1';
显示了执行顺序 显示通过where条件然后再使用index。explain select * from test where name='name1';
当执行这两条时也可以看出,下面的语句会因为无法全部通过索引查到,所以会进行回表查询操作。获取数据。
如有错误欢迎指正