文章目录

  • 引言
  • 聚簇索引和非聚簇索引是什么?
  • 主键索引和非主键索引有什么区别?
    • B-Tree 和 B+Tree 的简单理解
  • 如何避免回表?

引言

简单来说,回表就是 MySQL 要先查询到主键索引,然后再用主键索引定位到数据。

下面,对一些问题进行分析与回答:

  • 什么是聚簇索引?什么是非聚簇索引?
  • 为什么回表要先查到主键索引?
  • 主键索引和非主键索引有什么区别?
  • 如何避免回表?

聚簇索引和非聚簇索引是什么?

MySQL 的索引有不同的角度的分类方式,例如:按数据结构分、按逻辑角度分、按物理存储分。

其中,按物理存储分有两种索引:聚簇索引非聚簇索引

简单来说,聚簇索引是主键索引

主键索引之外的就是非聚簇索引,非聚簇索引又叫辅助索引或者二级索引。

主键索引和非主键索引有什么区别?

相同点:都使用的是 B+Tree 。

不同点:叶子节点存储的数据不同

  • 主键索引的叶子节点存储的是一行完整的数据
  • 非主键索引的叶子节点存储的是主键值。叶子节点不包含记录的全部数据,非主键的叶子节点除了用来排序的 key 还包含一个书签(bookmark),其中存储了聚簇索引的 key。

那么这两种索引在使用方面上有什么区别呢?

  1. 使用主键索引查询

    # 主键索引的的叶子节点存储的是**一行完整的数据**,
    # 所以只需搜索主键索引的 B+Tree 就可以轻松找到全部数据
    select * from user where id = 1;
    
  2. 使用非主键索引查询

    # 非主键索引的叶子节点存储的是**主键值**,
    # 所以MySQL会先查询到 name 列的索引的 B+Tree,搜索得到对应的主键值
    # 然后再去搜索该主键值查询主键索引的 B+Tree 才可以找到对应的数据
    select * from user where name = 'Jack';
    

可以看出使用非主键索引要比主键索引多使用一次 B+Tree。

B-Tree 和 B+Tree 的简单理解

理解聚簇索引和非聚簇索引的关键在于 B+Tree 的理解。

用一幅图来表示,其它的就不再过多解释了:

这里只是简单介绍一下 B-Tree 和 B+Tree 的区别:

  1. B+树中只有叶子节点会带有指向记录的指针,而B树则所有节点都带有,在内部节点出现的索引项不会再出现在叶子节点中。
  2. B+树中所有叶子节点都是通过指针连接在一起,而B树不会。

如何避免回表?

使用覆盖索引,所谓覆盖索引就是指索引中包含了查询中的所有字段,这种情况下就不需要再进行回表查询了。

什么是MySQL的回表?相关推荐

  1. 关于mysql数据库回表的粗浅理解

    1关于mysql数据库回表 说一下现象 比如有有一张test表,设置id为主键,name为索引 当使用 select id,name,age from test where id=1 查询数据的时候, ...

  2. 【MySQL】回表与覆盖索引

    目录 索引分类 聚簇索引 回表 覆盖索引(Cover Index) 索引分类 索引可以按照以下几个角度进行分类: 从数据结构的角度分类 B+tree 索引 Hash 索引 Full-texts索引 从 ...

  3. 生动的解释下什么是 MySQL 的“回表”?

    1. 索引结构 要搞明白这个问题,需要大家首先明白 MySQL 中索引存储的数据结构.这个其实很多小伙伴可能也都听说过,B+Tree 嘛! B+Tree 是什么?那你得先明白什么是 B-Tree,来看 ...

  4. mysql查询回表什么意思_什么是MYSQL回表查询

    select id,name where name='shenjian' select id,name,sex where name='shenjian' 多查询了一个属性,为何检索过程完全不同? 什 ...

  5. MySQL数据库——回表

    什么是回表 可以举一个简单的例子,我有一张用于用户登录的user表: 字段名 类型 说明 id bigint(20) 主键ID username varchar(20) 用户名 password va ...

  6. mysql回表什么意思_什么是Mysql的回表查询?聊一聊

    要说回表查询,先要从InnoDB的索引实现说起.InnoDB有两大类索引,一类是聚集索引(Clustered Index),一类是普通索引(Secondary Index). InnoDB的聚集索引 ...

  7. mysql回表查询uuid_MySQL数据库回表与索引

    [TOC] 回表的概念 先得出结论,根据下面的实验.如果我要获得['liu','25']这条记录.需要什么步骤. 1.先通过['liu']记录对应到普通索引index(name),获取到主键id:4. ...

  8. SQL - MySQL回表

    一.回表概念:现象 回表,顾名思义就是回到表中,也就是先通过普通索引(我们自己建的索引不管是单列索引还是联合索引,都称为普通索引)扫描出数据所在的行,再通过行主键ID 取出索引中未包含的数据.所以回表 ...

  9. MySQL回表与覆盖索引

    MySQL回表与覆盖索引 1. MySQL存储引擎 2. MySQL索引结构 2.1 B树和B+树定义 2.2 B树和B+树区别 2.3 B+Tree优点 3. MySQL索引回表 4. MySQL覆 ...

最新文章

  1. python 因果推断_KDD 2018:微软推出用于因果推断的Python库
  2. 比好莱坞市场大6倍—— 体育因数据分析而不同
  3. spark集群详细搭建过程及遇到的问题解决(四)
  4. 开放重定向(Open Redirection)
  5. java xml binding_JAXB(Java Architecture for XML Binding)
  6. power bi 地图_如何使用Power BI创建地理地图-填充地图和气泡地图
  7. 当遭遇TCP洪水(SYN Flood)后的的诊断思路和处理过程
  8. ashx比较完美的权限处理(适合页面,不适合安卓远程读取接口)
  9. c#语言打印九九乘法表,C#打印九九乘法表
  10. 利用中文维基百科训练词向量模型
  11. 安全基础:0-day漏洞
  12. MyEclipse2020中JSP文件光标乱跳
  13. 【奋斗人生】心得日记(20191112至20191230)
  14. 2022天梯L1-L2题解
  15. 钉钉企业内部机器人python开发(公网部署版本)
  16. “金融+科技”内外双赋能 拆解数字化浪潮下的平安打法
  17. 大学生集体户口面临孩子落户困境
  18. 基于单片机的自动化硬币分拣找零系统设计
  19. 使用Mifare卡加密数据 笔记
  20. kodi mysql_家庭影音必备系统Kodi虽然好用但总少了些什么?或许你需要一台群晖为 Kodi 注入多设备同步能力...

热门文章

  1. AI产教融合新标杆!百度与“华东六校”共建人工智能微专业
  2. sim卡没坏但苹果手机无服务_苹果x无服务,苹果x基带坏了维修多少钱
  3. asp php时间格式,asp显示时间和日期
  4. stream !_实时Laravel通知和关注? 当然,有了Stream!
  5. 【不到1G的win10,老机专用】星岚技术 Win10 x64 极限精简版 V2021.5
  6. ADB安卓调试桥接工具
  7. pip 安装 pyautogui 失败
  8. day17_雷神_数据库 小全
  9. Flink学习3-WordCount词频统计
  10. 计算机本地磁盘类型gpt,选中的磁盘采用gpt分区形式怎么操作_win7为磁盘选择gpt分区形式教程...