mysql:索引的数据结构,B树,B+树浅聊

news2024/11/17 1:57:50

mysql:索引的数据结构

什么是索引?
索引(Index)是帮助MySQL高效获取数据的数据结构

为什么学索引?
之前应该有概念说,把索引理解为目录,比如通过s就可以查询到s开头的汉子从哪也开始,到结束,这样快速定位

索引需要记住哪些?
innodb的索引的数据结构使用的是b+树,那么我们就要知道b+数的数据结构
既然使用索引,那就一定会
占用存储空间
,当然索引不是越多越好。
在这里插入图片描述

B+树

b+数,我们要记住,所有的数据存在叶子节点上,每个数据页里面的数据是单链表的形式连接,数据页之间是双向链表,图上花得很清楚。
InnoDB要求表 必须有主键 ( MyISAM可以没有 )。如果没有显式指定,则MySQL系统会自动选择一个,可以非空且唯一标识数据记录的列作为主键。如果不存在这种列,则MySQL自动为InnoDB表生成一个隐含字段作为主键,这个字段长度为6个字节,类型为长整型。
在这里插入图片描述
解释一下图,
最下面的是一个个数据,(1,4,‘u’)(3,9,‘d’),(4,4,‘a’),当然这个表就是3个字段。
可以看到第30页就有一个数据(1,10),其中10就是指向第10页,1就是这个页面中最小的值。

这样的话,例如你根据主键查,为20的数据,就会去从页33查,查到页33=》页30=》页9
这样的只有2次io,就是吧两个数据页加载到内存中,不需要把所有的叶子节点,加载到内存中。
为什么是2次io?因为根节点常驻内存

聚簇索引和非聚簇索引(都是b+树的结构)这里比较抽象的话可以看尚硅谷康老师是的mysql第115-120

其实聚簇,非聚簇,就是看b+数中存储的是真的数据,还是主键。
因为非聚簇索引,查到最后的是主键值,还是要回表,做一次查询真正数据的操作。
聚簇索引,使用记录主键值的大小进行记录和页的排序

  • 页内 的记录是按照主键的大小顺序排成一个 单向链表 。
  • 各个存放 用户记录的页 也是根据页中用户记录的主键大小顺序排成一个 双向链表 。
  • 存放 目录项记录的页 分为不同的层次,在同一层次中的页也是根据页中目录项记录的主键
    大小顺序排成一个 双向链表 。

myisam
myisam都是非聚簇的,都是存放的地址,而不是真正的数据。
MyISAM索引文件和数据文件是 分离的 ,索引文件仅保存数
据记录的地址。

MySQL数据结构选择的合理性

上面聊了一下B+树
下面看看所有的数据结构
Hash结构
B树
多路平衡查找树
在这里插入图片描述
非叶子节点既保存索引,也保存数据记录

注意:
b+树比b树的查询更加稳定,
b+树的查询更快,因为在同样的磁盘空间下,b+树的根节点不存放实际数据,可以可以容纳更多的数据,树形更加广。
在范围查找上,b+树更快,因为b+树的叶子节点上的数据是顺序排序的,而b树因为根节点也存储数据,就要通过数的查询方式去找。

B+树的存储能力如何?为何说一般查找行记录,最多只需1~3次磁盘IO
一般指针为8B,主键值为8或4B,这样一个数据页16k可以存放1000个数据,那么深度为3的b+树就可以存放10亿个数据。
b+树的高度一般为2~4,但是根节点一般常驻内存,所以一般要1到3次io

hash和b+区别
hash是无序的但是b+树是有序的更适合范围查询。
hash不支持排序。
但是innodb引入了 自适应hash

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/170624.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[网鼎杯 2020 青龙组]AreUSerialz

目录 信息收集 代码审计 前提知识 思路分析 绕过检测 方法一 poc payload 方法二 poc payload 信息收集 进入页面给出了源代码如下&#xff0c;是一道PHP的反序列化题目 <?phpinclude("flag.php");highlight_file(__FILE__);class FileHandler {pro…

Linux多线程 线程概念 | 线程VS进程 | 线程控制【万字精讲】

线程 一、线程概念 1. 知识支持及回顾 在我们一开始学习进程的时候。我们总说进程在内部执行时&#xff0c;是OS操作系统调度的基本单位。其实并不严谨&#xff0c;今天&#xff0c;我们要重新完善这个说法——线程在进程内部运行&#xff0c;线程是OS操作系统调度的基本单位…

WorkPlus移动办公平台,助力企业随时随地“指尖办公”

近年来&#xff0c;随着移动互联网的发展&#xff0c;越来越多的人习惯于随时随地通过移动设备完成工作、购物、游戏等。移动办公应用就是基于移动终端的信息化办公应用&#xff0c;利用企微、钉钉、WorkPlus等移动办公平台&#xff0c;实现企业与员工间的随时随地工作、沟通&a…

技术分享 | ClickHouse StarRocks 使用经验分享

作者&#xff1a;许天云 本文来源&#xff1a;原创投稿 *爱可生开源社区出品&#xff0c;原创内容未经授权不得随意使用&#xff0c;转载请联系小编并注明来源。 一. 大纲 本篇分享下个人在实时数仓方向的一些使用经验&#xff0c;主要包含了ClickHouse 和 StarRocks 这两款目…

ASP.NET MVC解决方案的搭建(.NET Framework)——C#系列(一)

一、新建项目 1、控制器新建 2、Service层新建 3、Business数据层新建 4、Commons公共层新建 5、Models实体层新建 二、调用接口 1、接口建立 Web API 2 控制器新建 2、调用 三、Swagger接口调试配置 1、添加NuGet包 在启动项中添加Swashbuckle NuGet包 2、访问 htt…

Vivado2018.3安装及注册指南-安装包获取

一、vivado 介绍 vivado设计套件 是FPGA 厂商赛灵思&#xff08;Xilinx&#xff09;公司最新的为其产品定制的集成开发环境&#xff0c;支持Block Design、Verilog、VHDL等多种设计输入方式&#xff0c;内嵌综合器以及仿真器&#xff0c;可以完成从设计输入、综合适配、仿真到…

mysql存储过程的基础知识

本文来简单说下存储过程的基础知识 文章目录概述什么是存储过程存储过程的优缺点概述 mysql官网提供的储存过程&#xff1a;https://www.mysqlzh.com/doc/225/499.html 什么是存储过程 简单的说&#xff0c;存储过程是一条或者多条SQL语句的集合&#xff0c;可视为批文件&…

SAP采购中不基于收货的发票校验的价差计算过程实例

年前最后一天上班了&#xff0c;我还在帮财务分析一个价差问题。源于财务用户头天的一个请求&#xff0c;在不基于收货的发票校验中&#xff0c;计算倒不难&#xff0c;难的是梳理数量的逻辑关系。不过总算时间也没白花&#xff0c;记录下来。下次就不算了&#xff0c;能解释清…

理解使用并查集

目录 一.并查集原理 1.概念&#xff1a; 2.性质 3.形式 4. 合并方式 二.并查集实现 1.成员变量 2.构造函数 3.查找根 4.合并集合 5.判断是否在一个集合 6.查看集合数量 三.并查集总代码 前言&#xff1a;理解并查集是为了接下来学习图要用&#xff0c;而会使用并查…

Linux:系统性能监控工具-tsar安装和使用

在上家公司做性能压力测试时就用过tsar&#xff0c;但总结文档留在了内部&#xff0c;正好借着最近工作内容又用上了tsar&#xff0c;总结起来 目录前言tsar介绍总体架构安装tasrtsar配置介绍配置文件定时任务配置日志文件tsar使用tsar实际使用参考查看可用的监控模块列表查看C…

本松新材创业板IPO终止:业绩下滑,客户较集中,周永松为实控人

撰稿|汤汤 来源|贝多财经 近日&#xff0c;深圳证券交易所披露的信息显示&#xff0c;杭州本松新材料技术股份有限公司&#xff08;下称“本松新材”&#xff09;提交了撤回上市申请文件的申请&#xff0c;保荐人财通证券也撤回对该公司的保荐。因此&#xff0c;深交所终止了…

目标检测:YOLOV3技术详解

目标检测&#xff1a;YOLOV3技术详解前言主要改进DarkNet53新的分类器正负样本的匹配损失函数前言 YOLOV3是V2的升级版&#xff0c;也是原作者的绝笔&#xff0c;V3主要还是把当时一些有用的思想融入了进来&#xff0c;没有什么创新型的突破&#xff0c;具体细节我们下面介绍。…

【安卓逆向】Frida入门与常用备忘

【安卓逆向】Frida入门与常用备忘前置知识什么是hook&#xff1f;hook的作用常见的逆向工具Frida使用入门简介与资料参考备忘前置环境配置执行hook常用hook脚本/API前置知识 什么是hook&#xff1f; hook&#xff0c;译为“钩子”&#xff0c;是指将方法/函数勾住&#xff0c;…

2022-CSDN的一年

前言 马上要到兔年的春节&#xff0c;年前最后一个版本顺利上线&#xff0c;闲下来两天&#xff0c;可以对过往一年进行一下总结&#xff0c;说起来这是入职CSDN之后第一次自己将自己所思所想以以博客的形式发布在CSDN网站上&#xff0c;也是比较奇特的体验。语言表达能力不强&…

利用华为路由器配置单臂路由功能,实现多个vlan间通信

单臂路由&#xff0c;是通过一台路由器使不同VLAN之间互通的数据通过路由器进行三层转发。 如果在路由器上为每个 VLAN分配一个单独的路由器物理接口&#xff0c;那么随着VLAN数量的增口&#xff0c;必然需要更多的接口&#xff0c;而路由器能提供的接口数量有限&#xff0c;所…

Kubernetes 基本概念

Kubernetes 是什么 Kubernetes 是一个可移植、可扩展的开源平台。用于管理容器化的工作负载和服务&#xff0c;可促进声明式配 置和自动化。是谷歌保密了十几年的秘密武器Borg的开源版本&#xff0c;谷歌一直通过Borg系统管理着数量庞大 的应用程序集群。由于Kubernetes是基于…

元素排序 Comparable 和 Comparator 有什么区别?

1.字面含义不同 我们先从二者的字面含义来理解它&#xff0c;Comparable 翻译为中文是“比较”的意思&#xff0c;而 Comparator 是“比较器”的意思。Comparable 是以 -able 结尾的&#xff0c;表示它自身具备着某种能力&#xff0c;而 Comparator 是以 -or 结尾&#xff0c;…

7. R语言【相关性分析函数】:cov、cor、cor.test 和 【相关性检验函数】:cor.test、corr.test、pcor.test

b站课程视频链接&#xff1a; https://www.bilibili.com/video/BV19x411X7C6?p1 腾讯课堂(最新&#xff0c;但是要花钱&#xff0c;我花99&#x1f622;&#x1f622;元买了&#xff0c;感觉讲的没问题&#xff0c;就是知识点结构有点乱&#xff0c;有点废话&#xff09;&…

二、TortoiseGit的安装

1、TortoiseGit的安装 1.1、TortoiseGit简介 (1)TortoiseGit是一个基于TortoiseSVN的Git的Windows Shell接口。它是开源的&#xff0c;可以免费使用。 (2)TortoiseGit是git的比较好用的一个图形化工具。 1.2、软件下载 (1)下载地址 Download – TortoiseGit – Windows S…

84. 双向循环神经网络

1. 未来很重要 取决于过去和未来的上下文&#xff0c;可以填很不一样的词目前为止RNN只看过去在填空的时候&#xff0c;我们也可以看未来城 2. 双向RNN 两个隐状态层&#xff0c;并行计算隐状态&#xff0c;但是隐状态传播方向相反。 公式如下&#xff1a; 3. 推理 双向RNN不…