我们都知道对于主键索引来说,叶子节点存着数据;
对于二级索引来说,叶子节点并不保存数据,而是存着主键索引的键值;
一个走覆盖索引的查询,按我的理解取数据过程是这样的:通过二级索引树上找到对应的主键键值,然后去主键索引树里面取对应的数据。
但是从二级索引树到这个主键索引树取数据,这不就是回表的定义吗?为什么通常说覆盖索引没有回表呢?
我们都知道对于主键索引来说,叶子节点存着数据;
对于二级索引来说,叶子节点并不保存数据,而是存着主键索引的键值;
一个走覆盖索引的查询,按我的理解取数据过程是这样的:通过二级索引树上找到对应的主键键值,然后去主键索引树里面取对应的数据。
但是从二级索引树到这个主键索引树取数据,这不就是回表的定义吗?为什么通常说覆盖索引没有回表呢?
这和你的查询字段有关
select id,name from user where name='shenjian'; 假如这个表上有主键索引id 还有另外一个索引在name字段上,
这时候这个查询是不用回表的 因为name上的索引+主键索引就能返回要查询的id name两个字段了,不需要回表了,
假如你的查询多了几个字段select id,name,sex,address from user where name='shenjian'; 这个时候sex,address 必须要回表查了