论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com技术社区
»
论坛
›
数据库
›
SQL-Server
›
MySql索引的数据布局
MySql索引的数据布局
尚未崩坏
论坛元老
|
2024-6-22 23:06:53
|
显示全部楼层
|
阅读模式
楼主
主题
1856
|
帖子
1856
|
积分
5568
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
mysql索引是什么?
想象一下,你手上有一本数学课本,但是目录被别人给撕掉了,如今要你翻到三三角函数的那一页,该怎么办?
没有了目录,就只有两种方法,要么一页一页翻,要么随机翻。
如果数据表没有目录的话,那要查询满足条件的记载行,就需要举行全表扫描,如今的互联网应用,数据量都非常大,百万万万都很常见,这要是全表扫描,那可就恼火了,所以为了加快查询的速率,得给数据表也设置目录,这个为数据表计划的目录就是索引。
MySql采用B+数作为数据布局的原因
二叉树——>平衡二叉树——>B树——>B+树
想要实现查询,最简朴的办法就是二分法查找,比如要根据ID来查找,就可以根据ID字段来构建一棵二叉树,顺着二叉树就可以找到要查询的内容,但是平凡的二叉树存在一个问题,就是随着新的数据节点不停地插入,很有可能造成树的不平衡,极端的情况之下乃至会变成一个链表,这就非常倒霉于数据的查询
为了防止上述情况的出现,可以将二叉树升级一下变成一个平衡二叉树,这样就避免了不平衡的情况,但是随着数据量越来越大,这棵平衡二叉树的高度就会变得非常深,每层的节点数被锁定位上层节点的二倍,以此类推,即便是存1000条数据,二叉树就会变成10层,查找数据就需要多次分叉,每一次分叉都需要读取一次硬盘的数据,这样一来,一次查询就需要举行很多多少次的IO操纵,而读取硬盘的数据,相对于内存是非常慢的。
后来,B树的利用使得书的深度问题得到相识决。在B树中,一个节点可以有多个数据,并且他们按顺序排列起来,别的原来二叉树的节点最多只能分开两个叉,如今可以开非常多的分叉,查找的时间还是先从根节点触发,由于节点里的所有数据都是有序排列的,在节点中试用二分法就可以快速的定位到,如果没有查到,就根据数据节点所在的区间,去往下一级分叉的节点,重复查找的过程,由于可以有很多的分叉,所以这棵B树变得非常扁平化,纵然是非常大的数据量,也只需要很少几次IO访问就能完成查找。
【有很多的数据库都采用了B树作为数据存储的和索引的数据布局】
但是B树还是存在一些问题,比如 他的查询效率不太稳固,有些在根节点或者根节点附近就能找到,那么他的查询效率就很快,如果距离根节点的距离比较远,那么查询的效率就比较慢了,所以性能不是很稳固。
别的,B树也不得当用来做范围查找,由于数据散落在不同的节点上,要查询某个范围的数据,就需要在B树上不消层级节点间进进出出,效率也会随之降低。
【MySql的索引采用B+树的数据布局】
所以就MySql就采用了B+树作为索引的布局。
B+树将数据全部都放在了叶子节点上,这样一来不管要查询哪个数据,最终都要走到叶子节点上,解决了查询性能不稳固的问题,其次,上面这些节点不消来存储数据了,省下来的空间用来存储指向其他节点的指针,这样一来,中间的节点中可以分出的叉就变得更多了,整个书变得更加的扁平,进一步减少IO查询的次数,最后再将叶子节点之间用指针毗连起来,这样一来,就能解决范围查询的问题了。
在一些其他的场景中,还可以利用哈希索引来计划。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复
使用道具
举报
0 个回复
正序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
发新帖
回复
尚未崩坏
论坛元老
这个人很懒什么都没写!
楼主热帖
读高性能MySQL(第4版)笔记01_MySQL架 ...
SQL Server向表中插入数据
鸿蒙DevEco Studio3.0——开发环境搭建 ...
容器开发运维人员的 Linux 操作机配置 ...
Redis命令手册
关于对四维空间一些理解
Webpack的使用
Triple 协议支持 Java 异常回传的设计 ...
.NET现代化应用开发 - CQRS&类目管理代 ...
2022-8-17 mysql 第三天
标签云
AI
运维
CIO
存储
服务器
浏览过的版块
数据仓库与分析
DevOps与敏捷开发
数据安全
网络安全
快速回复
返回顶部
返回列表