简单了解Mysql数据结构

简介:

什么是索引?索引就是排好序的数据结构,可以快速的查找我们想到的数据

类型:

二叉树、红黑树、hash表、b tree、b+tree
 
1、二叉树:它是单边增长的链表结构,这样会造成树的高度比较大、如下图
 
 
这个时候,如果我们要搜索6,就需要从1~6走一遍,需要走6个节点才能查到我们想要的数据,太浪费查询时间,
 
 
2、红黑树: 在二叉树的基础上多了树平衡,也叫二叉平衡树,不像二叉树那样极端的情况会往一个方向发展。
 
同样的我们查找6,红黑树中我们只需要3个节点(2-4-6),但是mysql索引的数据结构并不是红黑树,而是 b+tree,因为如果数据量大了之后,树的高度就会很大
 
 
3、b tree,在红黑树的基础上,每个节点可以多存放数据
 
相比于红黑树,我们同样的查询6,b 树只需要2个节点(4-6),时间又快了一点
 
 
4、b+tree、b tree 的增强版、它的结构是这样的
这时候我们会发现,非叶子节点和叶子节点的数字是重复的,这是因为b+tree的数据都是储存在叶子节点上,(Mysql底层用的就是B+tree),这些数据统一放在了mysql文件下的dev文件中,感兴趣的可以再私下研究,需要注意的一点是,MyISAM引擎和InnnoDB引擎的文件个数是不一样的,前者是三个文件(.frm是存放表结构数据、MYD是表数据、MYI是存放索引),后者是两个文件(.frm文件时存放表结构数据、.ibd是储存数据和索引)
 
5、hash
它储存数据的方式是用hash表来存的, Hash 是采用了hash算法,比如说MD5加密,这其实就是hash算法的一种,hash算法包括很多方式,它的速度比B+tree的速度还要快,这个时候很多人就会有疑问了,那为什么比B+tree快,却用它次数却不多呢,这是因为B+tree的叶子节点都是链表结构,而且是它有顺序的,从左往右依次递增,想要取某一个范围的值,只需要知道两个节点的位置就可以了,而hash要通过算法,一个个算出来,如果从业务上分析的话,查询范围用的多的话 就用B+tree,如果是精确查询多的话,就用Hash
 
 
 
 

猜你喜欢

转载自blog.csdn.net/qq_42227281/article/details/104805831