当前位置:网站首页>MySQL回表指的是什么
MySQL回表指的是什么
2022-08-04 00:52:00 【亿速云】
MySQL回表指的是什么
本篇内容主要讲解“MySQL回表指的是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL回表指的是什么”吧!
引言
简单来说,回表就是 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回表指的是什么”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
边栏推荐
猜你喜欢
随机推荐
js中常用的几种遍历处理数据的方法梳理
取模运算(MOD)
咱们500万条数据测试一下,如何合理使用索引加速?
Web3 security risks daunting?How should we respond?
600MHz频段来了,它会是新的黄金频段吗?
The 600MHz band is here, will it be the new golden band?
nodeJs--async/await
corn表达式 具体详解与案例
typescript51 - basic use of generics
数据库扩容也可以如此丝滑,MySQL千亿级数据生产环境扩容实战
SQL优化的一些建议,希望可以帮到和我一样被SQL折磨的你
Electronics manufacturing enterprise deployment WMS what are the benefits of warehouse management system
字符串变形
动态内存二
114. 如何通过单步调试的方式找到引起 Fiori Launchpad 路由错误的原因
Nanoprobes丨Nanogold-抗体和链霉亲和素偶联物
jmeter分布式压测
带你造轮子,自定义一个随意拖拽可吸边的悬浮View组件
【链路聚合原理及配置】
分布式事务框架 seata