Mysql中的回表查询
基础知识Mysql中的B-Tree和B+Tree原理解析MySQL MyISAM和Innodb索引实现原理分析什么是回表查询注意:mysql默认使用的innodb引擎,主键索引 == 聚集索引,辅助索引 == 普通索引。 这两个术语呢,可能在不同文章说法不同,但本质一样回表查询,实际查询两次,通过辅助索引(普通索引)实现的。因为辅助索引叶子节点不存放记录数据,只存放普通值和对应记录主键值例如:表t
·
基础知识
什么是回表查询
注意: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查找
更多推荐
已为社区贡献3条内容
所有评论(0)