(学习笔记)MySQL索引数据结构

一、什么是索引

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

索引存储在文件中。

二、MySQL索引结构的选择

索引可以使用的结构有很多种,例如二叉树、红黑树、HASH、B Tree等。MySQL索引经常使用的数据结构是B+Tree(B Tree的一个变种)。

除了BTREE的这几种数据结构都存在一定的性能问题:

  • 二叉树

向二叉树中插入5个元素时,数据存储的结构如下:

当索引值顺序递增时,查询索引值越大的数据,效率越低。

想查询0005的数据时,通过这种结构的索引查找数据,需要查询5次,查询效率很低。

  • 红黑树

向红黑树中插入5个元素时,数据存储的结构如下:

红黑树在二叉树的基础上,进行了自动平衡,性能上较二叉树好一些,但是如果数据量过大时,树的深度也很大,效率会很低。

想查询0005的数据时,需要3次查询。

  • HASH

向hash表中插入5个元素,数据存储结构如下:

只需要进行一次hash运算就可以查询到对应的数据,但是如果需要范围查询,hash就不太适合。

  • B Tree

向B Tree中插入5个元素,数据存储结构如下:

  1. 在B Tree中每个节点(上图中是3个节点)中可以存储多个元素(每个元素携带索引及数据)
  2. 每个节点存储的元素个数,叫度(Degree)
  3. 节点中的索引值从左到右递增排列
  4. 叶子节点的指针为空

度不可以无限大,是因为磁盘和内存进行数据交换时有大小限制。

  • B+Tree(B Tree变种)

向B+Tree中插入7个元素,数据的存储结构如下:

  1. 非叶子节点不存储数据,只存储索引,可以增大度
  2. 相邻的叶子节点之间互相存在指针,提高了范围查询的性能
  3. 冗余了一定量的索引

三、MyISAM引擎、InnoDB引擎索引的实现

存储引擎是针对表来说,在同一个数据库中可以创建InnoDB的表,同时也可以创建MyISAM引擎的表

MyISAM引擎

MyISAM引擎的表会在磁盘中存储3种文件:

 

 

.frm 表结构文件

.MYD 数据文件

.MYI 索引文件

 

 

  • 叶子节点存储的数据是当前记录所在的地址,索引和数据时分离的,这样的索引也称为聚簇(聚集)索引。
  • 主键索引和非主键索引的结构没有区别。

InnoDB引擎

InnoDB引擎的表,在磁盘中会存储2中文件

.frm 表结构文件

.ibd 数据文件

  • 索引和数据存储在一起,这样的索引也叫聚簇(聚集)索引。

  • 主键索引的叶子节点存储的是完整数据。

  • 非主键索引的叶子节点存储的是主键的值,防止多个索引存储数据导致数据一致性问题并且也节省了磁盘空间。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值