索引的各数据结构简单介绍

索引:帮助MySQL高效获取数据是排序好数据结构

索引数据结构:二叉树、红黑树、Hash表、B-Tree

MySQL数据结构B+树

数据库中不同的表可能有不同的存储引擎

MylSAM存储引擎索引文件(MYI文件)和数据文件(MYD文件数据存放地址)是分离的(非聚集)

InnoDB存储引擎索引实现(聚集)(支持事务)

表结构(frm文件)和索引数据(ibd)

1、表数据文件本身就是按b+树组织的一个索引结构文件

2、聚集索引-叶节点包含了完整的数据结构

3、为什么InnoDB表必须有主键,并且推荐使用整型的自增主键

如果没有主键或者默认使用uuid作为主键会使索引重复,导致b+树重新分叉的情况,消耗性能

4、为什么非主键索引结构叶子节点存储的是主键值?(一致性和节省存储空间)

一、二叉树

在排好序的递增序列如1,2,3...这样的序列中没有用

二、红黑树

自平衡二叉树,当数据过大如千万级最坏需要23次磁盘io

hash表:索引方法除了b+树外还有hash表

hash算法MD5、CRC16等

hash对范围查找无能为力

三、B树

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

四、B+树(B树的变种)

1、B+树的概念

可最多存放1142*1142*16大约2000多万行数据

一个叶子节点16KB,索引用bigint类型存储大小8B,指针大小6B,故存储索引大小约为14B

16KB/14B=1142

2、B+树的特点

  • 非叶子节点不存储data只存储索引,可以放更多的数据
  • 叶子节点不存储指针(叶子节点采用链表存储
  • 顺序访问指针,提高区间访问的性能

发布了129 篇原创文章 · 获赞 9 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_41808387/article/details/104521566
今日推荐