文章目录

  • 引言
  • 聚簇索引和非聚簇索引是什么?
  • 主键索引和非主键索引有什么区别?
    • 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. 【STM32】SPI 实验代码详解
  2. 最短工期 (25 分)【拓扑排序模板】
  3. Oracle从小白到大牛的刷题之路(建议收藏学习)
  4. 2012年9月计算机二级c语言,2012 年9月 全国计算机二级c语言试题
  5. ubuntu 14.04 环境下打开xls、pdf与png文件
  6. Hive之管理表 外部表 分区表
  7. java随机10位随机数 random.uuid_一文详解编程中的随机数
  8. lombok 的使用
  9. JavaScript:正则表达式 分组
  10. java 中异步消息通知,ActivityMQ的基本使用
  11. 永宏plc和台达vfd-m变頻器modbs rtu通讯程序 史上最好用的plc和变頻器rtu通讯程序
  12. 最大约数(秋季每日一题 34)
  13. Excel中换行的问题
  14. 八位共阴数码管的工作方式
  15. 8 Babylonjs基础入门 相机,模型碰撞和重力效果
  16. 网页调用迅雷的JS(支持客户端版和网页版)
  17. 山寨免费软件的阴谋!
  18. Matlab Simulink 常用快捷操作和功能(1)
  19. Keil C51中code、data、bdata、idata、xdata、pdata的解释
  20. NIST数字测试套件使用说明

热门文章

  1. Ueditor 富文本编辑器 插入 m3u8 和 mp4 视频(PHP)
  2. UML类图关系的画法
  3. 推荐一款非Win7下专用的“任务栏图标收纳”工具——TrayApp(转自:http://www.ibobosky.com/my-quick-start-tool-trayapp.htm)
  4. 《ffmpeg basics》中文版 -- 19.FFmpeg 的组件和工程
  5. 计算机网络吴功益ppt,网络技术毕业设计(论文).doc
  6. 使用AS3中的FTE来渲染文本(FLash文本引擎入门)
  7. 声控楼道路灯电路的设计
  8. 精编,精讲,精练,精益求精---AP微积分第10版在精雕细琢反复打磨中与你相遇
  9. php使用pg中copy命令,PGSQL COPY命令导入/导出数据
  10. w7恢复系统默认服务器,W7系统自带备份还原 W7系统自带备份还原方法