什么是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覆 ...
最新文章
- python 因果推断_KDD 2018:微软推出用于因果推断的Python库
- 比好莱坞市场大6倍—— 体育因数据分析而不同
- spark集群详细搭建过程及遇到的问题解决(四)
- 开放重定向(Open Redirection)
- java xml binding_JAXB(Java Architecture for XML Binding)
- power bi 地图_如何使用Power BI创建地理地图-填充地图和气泡地图
- 当遭遇TCP洪水(SYN Flood)后的的诊断思路和处理过程
- ashx比较完美的权限处理(适合页面,不适合安卓远程读取接口)
- c#语言打印九九乘法表,C#打印九九乘法表
- 利用中文维基百科训练词向量模型
- 安全基础:0-day漏洞
- MyEclipse2020中JSP文件光标乱跳
- 【奋斗人生】心得日记(20191112至20191230)
- 2022天梯L1-L2题解
- 钉钉企业内部机器人python开发(公网部署版本)
- “金融+科技”内外双赋能 拆解数字化浪潮下的平安打法
- 大学生集体户口面临孩子落户困境
- 基于单片机的自动化硬币分拣找零系统设计
- 使用Mifare卡加密数据 笔记
- kodi mysql_家庭影音必备系统Kodi虽然好用但总少了些什么?或许你需要一台群晖为 Kodi 注入多设备同步能力...
热门文章
- AI产教融合新标杆!百度与“华东六校”共建人工智能微专业
- sim卡没坏但苹果手机无服务_苹果x无服务,苹果x基带坏了维修多少钱
- asp php时间格式,asp显示时间和日期
- stream !_实时Laravel通知和关注? 当然,有了Stream!
- 【不到1G的win10,老机专用】星岚技术 Win10 x64 极限精简版 V2021.5
- ADB安卓调试桥接工具
- pip 安装 pyautogui 失败
- day17_雷神_数据库 小全
- Flink学习3-WordCount词频统计
- 计算机本地磁盘类型gpt,选中的磁盘采用gpt分区形式怎么操作_win7为磁盘选择gpt分区形式教程...