如何选择MYSQL的数据结构

163 阅读1分钟

image.png

之前只是模模糊糊的知道mysql用的数据结构是B+树,在此记录一下

选择数据结构的依据就是尽可能的减少IO

数据结构选择

  • 链表
  • hash表
  • 红黑树
  • B树
  • B+树

链表

image.png

时间复杂度高,效率低

hash表

image.png

1、要有优秀的hash算法 2、不支持范围查询 3、需要大量的内存空间

红黑树

image.png

红黑树为了左右节点相减不超过1,左旋右旋消耗时间

不管是二叉树、AVL、红黑树,树的高度会随着数据的增加越来越高,因为只能是二叉

B树

image.png

B树相对于平衡二叉树的不同是,每个节点包含的关键字增多了,特别是在B树应用到数据库中的时候,数据库充分利用了磁盘块的原理(磁盘数据存储是采用块的形式存储的,每个块的大小为4K,每次IO进行数据读取时,同一个磁盘块的数据可以一次性读取出来)把节点大小限制和充分使用在磁盘快大小范围;把树的节点关键字增多后树的层级比原来的二叉树少了,减少数据查找的次数和复杂度;

B+树

image.png

B+树有两种类型的节点:内部结点(也称索引结点)和叶子结点。内部节点就是非叶子节点,内部节点不存储数据,只存储索引,数据都存储在叶子节点。

参考视频:www.bilibili.com/video/BV1Jb… B+树生成图的网站:www.cs.usfca.edu/~galles/vis…