mysql数据结构_mysql的底层数据结构

一.数据结构

1. 二叉树

特点:左侧子节点比父节点小,右侧子节点比父节点大(对于同一个父节点下的两个子节点)

缺点:对于一直递增得数据不能存在该数据结构中,会变成链表,不能降低树的高度

43710278d28e56dc6c24e7a1c56c7430.png

图 1-1

 b346f750625e589767d4a4078ad82fb9.png

图1-2

2. 红黑树

特点:左侧子节点比父节点小,右侧子节点比父节点大、或者相等(对于同一个父节点下的两个子节点),对于一直递增的数据可以自动平衡

缺点:对于百万条数据,树的高度还是太高

3. Hash

优点:对数据进行Hash(散列)运算,主流的Hash算法有MD5、SHA256等等,然后将哈希结果作为文件指针可以从索引文件中获得数据的文件指针,再到数据文件中获取到数据,按照这样的设计,我们在查找where Col2 = 22的记录时只需要对22做哈希运算得到该索引所对应那行数据的文件指针,从而在MySQL的数据文件中定位到目标记录,查询效率非常高。

缺点:无法解决范围查询(Range)的场景,比如 select count(id) from sus_user where id>10;因此Hash这种索引结构只能针对字段名=目标值的场景使用。不适合模糊查询(like)的场景

4. B-

特点:叶节点具有相同的深度,叶节点的指针为空,所有索引元素不重复,节点中的数据从左到右递增排列

缺点:存储的数据量没有B+树多,B树不支持range-query

(区间查询)

                 684a338c625492dc419cb0c278038dd5.png

图1-3

5. B+

特点:非叶子节点不存储data,只存储索引(冗余),可以放更多的索引,叶子节点包含所有索引字段,叶子节点用指针链接,提高区间访问的性能。

与B-树对比B+树有一个最大的好处,方便扫库,B树必须用中序遍历的方法按序扫库,而B+树直接从叶子结点挨个扫一遍就完了,B+树支持range-query(区间查询)非常方便,而B树不支持。

 523dce9ea185eb91fe6b303632184f41.png

图 1-4

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

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

相关文章

winform判断线程有没有完成_并发编程系列1:线程池的架构实现、大小配置、及四种线程池使用...

△ 公众号回复关键词“架构” 即可领取《1500BAT架构及面试专题合集》本篇为线程池系列文章之一,不经常使用线程池的童鞋,还有对几种线程的使用不甚了解的童鞋,可以读一下此文,并关注后续线程池相关文章连载。 本篇内容大纲&#…

python枚举是什么意思,什么是枚举python

枚举类型可以看作是一种标签或是一系列常量的集合,通常用于表示某些特定的有限集合,例如星期、月份、状态等。Python 的原生类型(Built-in types)里并没有专门的枚举类型,但是我们可以通过很多方法来实现它,例如字典、类等&#x…

拖拽批量上传图片如何保证 顺序_图片压缩神器和图片分割工具,美工设计和运营终于得救了...

想要快速互联网干货技巧?请(置顶)星标我们好不容易写好文案,设计好长图海报,上传到微信公众号,竟然提示上传图片体积不得超过5M,怎么办?怎么办?不得已,只好又返回Ps里降低…

php将word转txt,PHP如何将将word文件转为pdf

PHP将word文件转为pdf的方法:首先修改【php.ini】,并重启环境;然后安装微软office套件;最后配置office组件服务即可。PHP将word文件转为pdf的方法:1、修改php.ini添加:extensionphp_com_dotnet.dll去除注释…

redis一般缓存什么样数据_SpringBoot+Redis轻松实现数据缓存

1.为什么需要缓存为什么需要缓存,我相信搞开发的都能回答出来,无非就是为了降低数据库压力,节约资源,提升系统性能。而事实上也确实是,归根结底就是降压,高并发,高性能。不过,大厂里…

红旗linux安装oracle,Redflag Linux安装Oracle 10gR2 RAC记事

Redflag Linux安装Oracle 10gR2 RAC记事Kamus遇到过:SQL> startup nomountORA-27102: out of memoryLinux-x86_64 Error: 28: No space LEFT ON device这和内核参数 shmall 有关,修改设置 kernel.shmall 16475728 。后来离开没多久,客户打…

springboot开启debug日志_SpringBoot 如何优雅的打印日志?

一、打印日志注意事项1、使用 Slf4j 注解这个代码相信大家都很熟悉,你是否曾经看到或者自己因 copy 而 没有改变“当前类名”?如果你们项目用到 lombok ,可以在类上使用 Slf4j 注解,省去手动写这行代码。2、不建议使用的输出为什么…

windows 映射文件会释放内存吗_Windows系统共享内存管理

一 进程逻辑空间 物理空间​如上图所示,每个进程都有自己的逻辑空间,这些逻辑空间,会被映射到具体的物理空间中。每个进程的逻辑空间都是彼此隔离,相互独立不受干扰的。但是他们都会被映射到同一个物理空间去,当其所映…

linux 文件的组织,Linux文件组织和目录结构

资料:https://www.shiyanlou.com/courses/running1 Linux目录结构说明可以使用tree来查看目录结构sudo apt-get install tree 安装treetree / 查看根目录的结构将目录定义为四种交互作使用的形态:2 路径. 表示当前目录.. 表示上一级目录 - 表示上一次所在…

jeecg 导出的excel不能使用公式_微软:Excel公式是世界上使用最广泛的编程语言...

喜欢就关注我们吧!文|一君微软近日推出了一项 Excel 公式构建的新功能 LAMBDA,正则测试阶段。LAMBDA 允许使用 Excel 自身的公式语言自定义功能,而过去,Excel 中需要通过 JS 等语言编写自定义函数。同时,LAMBDA 还可以…

voip 音频采集时间_蓝牙音频续航监测系统展会现场演示

|点击【美格信】关注☝大家好,我是美格信公众号主编:小M,今天的2020(秋季)亚洲蓝牙耳机展上,我们美格信现场展示了发布的新品-MAGNUM麦金纳蓝牙音频续航监测系统。不过有很多小伙伴因为时间问题,没机会来现场参观&…

linux 运行scrapy,python 文件 运行 scrapy

写了一个scrapy,程序可以跑,没有任何问题。爬下30个网站的body存入json文件,并且保存为test.json如果test.json存在就保存到一个新建的test1.json新建了一个python文件叫check.py,对比两个文件的hash值,如果有不一样&a…

大整数减法c语言_3.2 C语言运算符和表达式

01基本的算术运算符1、正号运算符2、-负号运算符3、*乘法运算符4、/除法运算符5、%求余运算符6、加法运算符7、-减法运算符读者应该特别注意和-在不同情况下的含义02自增、自减运算符1、i,--i在使用i之前,先是i的值加(减)12、i&am…

如何查看linux 是否安装软件包,linux 查看软件包是否安装 linux查看软件包

Linux下怎样检查,如何查看某软件包是否已经安装1、rpm包安装的,可以用rpm -qa看到,如果要查找某软件包是否安装,用 rpm -qa | grep “软件或者包的名字”。rpm -qa | grep ruby2、以deb包安装的,可以用dpkg -l能看到。如果是查找指…

trueOS能装linux软件,TrueOS 是什么

TrueOS是一套基于FreeBSD-CURRENT、桌面取向的类Unix操作系统。主要目的是创建一个易于安装软件的图形用户界面,借由提供KDE SC、Lumina、MATE、Xfce等桌面环境使其容易上手。TrueOS 是一套基于 FreeBSD-CURRENT、桌面取向的类 Unix操作系统。主要目的是创建一个易于…

错误: 非法的表达式开始_虽然这两个C语言宏定义很简单,但是能在程序运行前找到错误代码...

今天翻看 Linux 内核源代码时,发现两行非常有意思的C语言代码,如下:#define BUILD_BUG_ON_ZERO(e) (sizeof(struct { int:-!!(e); }))#define BUILD_BUG_ON_NULL(e) ((void *)sizeof(struct { int:-!!(e); }))有意思的宏这两行C语言代码有什么…

linux下数据库时间格式,Java编程时间格式与数据库中时间格式转化

关于编程语言中的时间格式和关系型数据中的中时间格式问题的转化一直都是个简单而又不得不权衡的问题,这牵扯到数据库设计和SQL编程和应用程序中时间格式数据的处理的编程,两者总能够交缠在一起。关于Java中的时间格式和数据库中的时间格式转换在这里先写…

ue4玻璃材质_UE4-材质

本文中,我们将首先讨论基于物理的渲染,什么是材质域,什么是材质,什么是材质实例,什么是主材质,我们将讨论材质的一些建议和禁忌。最后,我们将了解一些材质概念,你可以将其用于各类项…

为啥linux分区是nvme0n1,NAS 篇五:尝试达成最终目标: 黑裙+万兆网卡+Nvme 存储空间的实现与测试...

NAS 篇五:尝试达成最终目标: 黑裙万兆网卡Nvme 存储空间的实现与测试2020-01-18 18:49:2346点赞248收藏80评论创作立场声明:1. 本系列文章讨论NAS与局域网, 请小编高抬贵手不要分类到无线网络去2. 如果你读了开头, 有“…

固态硬盘上安装centos_自己动手丰衣足食 手把手教你安装M.2固态硬盘

为了追求更快的速度、更好的性能,很多用户都为电脑升级或者更换了M.2固态硬盘。但是,M.2固态硬盘买好了,安装对大部分人来说却是个难题……因此,好多老铁通过微信后台联系小星,想了解一下M.2固态硬盘的安装教程。OK&am…