什么是MySQL的回表?
文章目录
- 引言
- 聚簇索引和非聚簇索引是什么?
- 主键索引和非主键索引有什么区别?
- B-Tree 和 B+Tree 的简单理解
- 如何避免回表?
引言
简单来说,回表就是 MySQL 要先查询到主键索引,然后再用主键索引定位到数据。
下面,对一些问题进行分析与回答:
- 什么是聚簇索引?什么是非聚簇索引?
- 为什么回表要先查到主键索引?
- 主键索引和非主键索引有什么区别?
- 如何避免回表?
聚簇索引和非聚簇索引是什么?
MySQL 的索引有不同的角度的分类方式,例如:按数据结构分、按逻辑角度分、按物理存储分。
其中,按物理存储分有两种索引:聚簇索引和非聚簇索引。
简单来说,聚簇索引是主键索引。
主键索引之外的就是非聚簇索引,非聚簇索引又叫辅助索引或者二级索引。
主键索引和非主键索引有什么区别?
相同点:都使用的是 B+Tree 。
不同点:叶子节点存储的数据不同
- 主键索引的叶子节点存储的是一行完整的数据;
- 非主键索引的叶子节点存储的是主键值。叶子节点不包含记录的全部数据,非主键的叶子节点除了用来排序的 key 还包含一个书签(bookmark),其中存储了聚簇索引的 key。
那么这两种索引在使用方面上有什么区别呢?
使用主键索引查询
# 主键索引的的叶子节点存储的是**一行完整的数据**, # 所以只需搜索主键索引的 B+Tree 就可以轻松找到全部数据 select * from user where id = 1;
使用非主键索引查询
# 非主键索引的叶子节点存储的是**主键值**, # 所以MySQL会先查询到 name 列的索引的 B+Tree,搜索得到对应的主键值 # 然后再去搜索该主键值查询主键索引的 B+Tree 才可以找到对应的数据 select * from user where name = 'Jack';
可以看出使用非主键索引要比主键索引多使用一次 B+Tree。
B-Tree 和 B+Tree 的简单理解
理解聚簇索引和非聚簇索引的关键在于 B+Tree 的理解。
用一幅图来表示,其它的就不再过多解释了:
这里只是简单介绍一下 B-Tree 和 B+Tree 的区别:
- B+树中只有叶子节点会带有指向记录的指针,而B树则所有节点都带有,在内部节点出现的索引项不会再出现在叶子节点中。
- B+树中所有叶子节点都是通过指针连接在一起,而B树不会。
如何避免回表?
使用覆盖索引,所谓覆盖索引就是指索引中包含了查询中的所有字段,这种情况下就不需要再进行回表查询了。
什么是MySQL的回表?相关推荐
- 关于mysql数据库回表的粗浅理解
1关于mysql数据库回表 说一下现象 比如有有一张test表,设置id为主键,name为索引 当使用 select id,name,age from test where id=1 查询数据的时候, ...
- 【MySQL】回表与覆盖索引
目录 索引分类 聚簇索引 回表 覆盖索引(Cover Index) 索引分类 索引可以按照以下几个角度进行分类: 从数据结构的角度分类 B+tree 索引 Hash 索引 Full-texts索引 从 ...
- 生动的解释下什么是 MySQL 的“回表”?
1. 索引结构 要搞明白这个问题,需要大家首先明白 MySQL 中索引存储的数据结构.这个其实很多小伙伴可能也都听说过,B+Tree 嘛! B+Tree 是什么?那你得先明白什么是 B-Tree,来看 ...
- mysql查询回表什么意思_什么是MYSQL回表查询
select id,name where name='shenjian' select id,name,sex where name='shenjian' 多查询了一个属性,为何检索过程完全不同? 什 ...
- MySQL数据库——回表
什么是回表 可以举一个简单的例子,我有一张用于用户登录的user表: 字段名 类型 说明 id bigint(20) 主键ID username varchar(20) 用户名 password va ...
- mysql回表什么意思_什么是Mysql的回表查询?聊一聊
要说回表查询,先要从InnoDB的索引实现说起.InnoDB有两大类索引,一类是聚集索引(Clustered Index),一类是普通索引(Secondary Index). InnoDB的聚集索引 ...
- mysql回表查询uuid_MySQL数据库回表与索引
[TOC] 回表的概念 先得出结论,根据下面的实验.如果我要获得['liu','25']这条记录.需要什么步骤. 1.先通过['liu']记录对应到普通索引index(name),获取到主键id:4. ...
- SQL - MySQL回表
一.回表概念:现象 回表,顾名思义就是回到表中,也就是先通过普通索引(我们自己建的索引不管是单列索引还是联合索引,都称为普通索引)扫描出数据所在的行,再通过行主键ID 取出索引中未包含的数据.所以回表 ...
- MySQL回表与覆盖索引
MySQL回表与覆盖索引 1. MySQL存储引擎 2. MySQL索引结构 2.1 B树和B+树定义 2.2 B树和B+树区别 2.3 B+Tree优点 3. MySQL索引回表 4. MySQL覆 ...
最新文章
- 【STM32】SPI 实验代码详解
- 最短工期 (25 分)【拓扑排序模板】
- Oracle从小白到大牛的刷题之路(建议收藏学习)
- 2012年9月计算机二级c语言,2012 年9月 全国计算机二级c语言试题
- ubuntu 14.04 环境下打开xls、pdf与png文件
- Hive之管理表 外部表 分区表
- java随机10位随机数 random.uuid_一文详解编程中的随机数
- lombok 的使用
- JavaScript:正则表达式 分组
- java 中异步消息通知,ActivityMQ的基本使用
- 永宏plc和台达vfd-m变頻器modbs rtu通讯程序 史上最好用的plc和变頻器rtu通讯程序
- 最大约数(秋季每日一题 34)
- Excel中换行的问题
- 八位共阴数码管的工作方式
- 8 Babylonjs基础入门 相机,模型碰撞和重力效果
- 网页调用迅雷的JS(支持客户端版和网页版)
- 山寨免费软件的阴谋!
- Matlab Simulink 常用快捷操作和功能(1)
- Keil C51中code、data、bdata、idata、xdata、pdata的解释
- NIST数字测试套件使用说明
热门文章
- Ueditor 富文本编辑器 插入 m3u8 和 mp4 视频(PHP)
- UML类图关系的画法
- 推荐一款非Win7下专用的“任务栏图标收纳”工具——TrayApp(转自:http://www.ibobosky.com/my-quick-start-tool-trayapp.htm)
- 《ffmpeg basics》中文版 -- 19.FFmpeg 的组件和工程
- 计算机网络吴功益ppt,网络技术毕业设计(论文).doc
- 使用AS3中的FTE来渲染文本(FLash文本引擎入门)
- 声控楼道路灯电路的设计
- 精编,精讲,精练,精益求精---AP微积分第10版在精雕细琢反复打磨中与你相遇
- php使用pg中copy命令,PGSQL COPY命令导入/导出数据
- w7恢复系统默认服务器,W7系统自带备份还原 W7系统自带备份还原方法