首页 > 数据库 >知识点 1: MySQL的回表

知识点 1: MySQL的回表

时间:2022-09-26 10:59:22浏览次数:75  
标签:知识点 存储 Tree 叶子 节点 回表 索引 MySQL 主键

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

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

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

 

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

 

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


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

相同点:都使用的是 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';
————————————————
版权声明:本文为CSDN博主「普通网友」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_67403073/article/details/126080893

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

 

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

 

 

   

 名字: 指向记录的指针    叶子节点  内部节点    指针连接在一起

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

 ----理解:

B+Tree是B树的变种,有着比B树更高的查询性能,来看下m阶B+Tree特征:

1、有m个子树的节点包含有m个元素(B-Tree中是m-1)

2、根节点和分支节点中不保存数据,只用于索引,所有数据都保存在叶子节点中。

3、所有分支节点和根节点都同时存在于子节点中,在子节点元素中是最大或者最小的元素。

4、叶子节点会包含所有的关键字,以及指向数据记录的指针,并且叶子节点本身是根据关键字的大小从小到大顺序链接。

 

4:如何避免回表?

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

详解:知识点2 

MySQL优化:如何避免回表查询?_什么是索引覆盖?

标签:知识点,存储,Tree,叶子,节点,回表,索引,MySQL,主键
From: https://www.cnblogs.com/liyanxi/p/16729632.html

相关文章

  • 常见的数据库软件介绍和MySql的安装
    常见的数据库软件介绍MySQL:开源免费的数据库,小型的数据库,已经被Oracle收购了,MySQL6.x版本也开始收费Oracle:收费的大型数据库,Oracle公司的产品,Oracle收购SUN公司,收购MYSQL......
  • MySQL学习(4)---MySQL索引
    ps:没有特殊说明,此随笔中默认采用innoDB存储引擎中的索引,且索引都是指B+树(多路平衡搜索树)结构组织的索引。其中聚集索引、复合索引、前缀索引、唯一索引默认都是使用B+树,统......
  • mysql too many connections
    mysqltoomanyconnections--最大连接数showvariableslike'max_connections';--最大返回数Max_used_connections/max_connections*100%应该要大于......
  • linux 离线安装 mysql8.0
    一、下载linuxmysql8.0离线安装包mysql下载地址:https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.20-linux-glibc2.12-x86_64.tar.xzmysql官方下载最新版本:ht......
  • mysql 8 设置binlog过期时间
    mysql>selectversion();+-----------+|version()|+-----------+|8.0.22|+-----------+1rowinset(0.01sec)mysql>showvariableslike'%expire%';......
  • MySQL目录结构
    MySQL安装目录配置文件my.ini;MySQL数据目录几个概念数据库文件夹表文件数据内容SQL分类DDL(DataDefinitionLanguage)......
  • 慢查询 MySQL 定位优化技巧,从10s优化到300ms
    文章目录如何定位并优化慢查询SQL?如何使用慢查询日志?慢查询例子演示,新手都能看懂查询语句慢怎么办?explain带你分析sql执行计划当主键索引、唯一索引、普通索引都存在......
  • CAP事件总线在NetCore中的应用+MySql存储队列信息
    上一篇链接:https://www.cnblogs.com/fei686868/p/16721769.html在上一篇中,我们介绍了CAP基于内存存储的应用。本篇我们介绍下,把存储做到mysql中,队列还是使用内存队列。my......
  • MySQL通过Data恢复数据库
    在真实的开发环境中,服务器突然蹦了,MySQL指令也不行了,备份...。只能通过物理备份Data。那我们如何通过Data恢复数据库。太简单了,只是复制粘贴的是。备份Data。备份Dat......
  • 【MySQL】二级MySQL考试 救场帮助表
     周六去考二级,应用第一题就是添加外键约束草,写了半天老说语法不对,然后急中生智,觉得默认的库里应该有文档说明表以下是SQL查询过程:--猜测是在mysql库里面mysql>USE......