基础知识

Mysql中的B-Tree和B+Tree原理解析

MySQL MyISAM和Innodb索引实现原理分析

什么是回表查询

注意:mysql默认使用的innodb引擎,主键索引 == 聚集索引,辅助索引 == 普通索引。 这两个术语呢,可能在不同文章说法不同,但本质一样

回表查询,实际查询两次,通过辅助索引(普通索引)实现的。因为辅助索引叶子节点不存放记录数据,只存放普通值和对应记录主键值

例如:

表t中有四条记录:

1, shenjian, m, A
3, zhangsan, m, A
5, lisi, m, A
9, wangwu, f, B

对应的主键索引(聚集索引),和辅助索引(普通索引)如下

在这里插入图片描述

查询语句如下:

create index idx_t_name on t(name);
select * from t where name='lisi';

执行流程:

1、先进行一次B+Tree查找,通过普通索引查找lisi对应的数据(叶子节点中)
2、再通过叶子节点中,data域中保存的lisi对应的主键值,进行一次B+Tree查找,找到对应记录行
3、将数据查找出来

在这里插入图片描述

这就是回表查询,先定位主键值,再定位行记录,它的性能较扫一遍索引树更低,应为两次查找Tree,磁盘IO较多。

也就是说一般情况下,只要使用普通索引,并且select 字段不属于索引,单次普通索引Tree查找,无法获取满足的数据,会进行第二次Tree查找

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐