mysql (InnoDB) - 回表理解

1. 基础

定义:
	通过非主键索引进行查询时,select的字段不能通过非主键索引获取到,需要通过非主键索引找到主键;从聚
簇索引再次查询一遍(需要多扫描一棵主索引树),获取到所要查询的记录;回表指的就是这个过程。

InnoDB主索引示意图(来源于网络):

	InnoDB引擎侠表数据文件本身就是按B+Tree组织的一个索引结构,这棵树的叶子结点的data域保存了完整的
数据记录。索引的key是数据表的主键,这样看来InnoDB数据表本身就是主索引。

在这里插入图片描述
InnoDB辅助索引示意图(来源于网络):

InnoDB辅助索引的data域存储相应记录主键的值,不同于MyISAM的data域存储的是地址。

在这里插入图片描述

1.1 概念拓展

聚集索引(聚簇索引):
	*聚集索引的非叶子节点存储表的主键;
	*聚集索引的叶子节点存储当前表中每条记录的所有信息;
	*按主键搜索十分高效。
	
非聚集索引(非聚簇索引):
	*非聚集索引的非叶子节点存储的是自己设置的索引对应的字段的值(如果是联合索引就存储联合索引对应的几
	 个字段的值);
	*非聚集索引的叶子节点只存储当前记录对应的主键id;
	*在非索引覆盖的情况下,需要检索两边索引(先通过辅助索引获得主键,然后用主键到主索引检索获得数据)
	
总结:
	*聚集索引是将主键ID指向了整条数据记录;
	*非聚集索引是将创建索引的字段指向主键ID。

2. 实例验证

2.1 通过Explain的Extra判断是否回表

useing index:一定没有回表
null:多数情况下需要回表
useing where:多数情况下需要回表

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值