MySql的存储引擎和索引分类及其实现原理

MySql的存储引擎,常用的有三种: InnoDB、MyISAM、 MEMORY

三种储存引擎的特点和选择

MyISAM

  • 特点:不支持事务和外键操作。读取速度快,节约资源。

  • 使用场景:以查询操作为主,只有很少的更新和删除操作,对事务的完整性、并发性要求不是很高!

InnoDB

  • 特点: MySQL的默认存储引擎,支持事务和外键操作。

  • 使用场景:对事务的完整性有比较高要求,在并发条件下要求数据的一致性读写频繁的操作!

MEMORY

  • 特点:将所有数据保存在内存中,在需要快速定位记录和其他类似数据环境下,可以提供更快的访问。

  • 使用场景:通常用于更新不太频繁的小表,用来快速得到访问的结果!

三者特性对比

  • ​ MylSAM存储引擎:访问快,不支持事务和外键操作

  • InnoDB存储引擎:支持事务和外键操作,支持并发控制,占用磁盘空间大。(MySQL 5.5版本后默认)

  • ​ MEMORY存储引擎:内存存储,速度快,不安全。适合小量快速访问的数据。

索引

MySQL索引:是帮助MySQL高效获取数据的一种数据结构。所以,索引的本质就是数据结构!

​ 在表数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式指向数据,这样就可以在这些数据结构上实现高级查找算法这种数据结构就是索引

按照功能分类

  • 普通索引:最基本的索引,没有任何限制。

  • 唯一索引:索引列的值必须唯一, 但允许有空值。如果是组合索引,则列值组合必须唯一。

  • 主键索引:一种特殊的唯一索引, 不允许有空值。在建表时有主键列同时创建主键索引。

  • 联合索列:顾名思义,就是将单列索弓l进行组合。

  • 外键索引:只贿InnoDB引擎支持外键索引,用来保证数据的一致性、完整性和实现级联操作。

  • 全文索引:快速匹配全部文档的方式。InnoDB 引擎5.6版本后才支持全文索引。MEMORY 引擎不支持。

按照结构分类

  • BTree索引: MySQL使用最频繁的一个索引数据结构,是InnoDBMylSAM存储引擎默认的索引类型底层基于B+Tree数据结构

  • Hash索引: MySQL中Memory存储引擎默认支持的索引类型。

    MySQL中,只有Memory存储引擎显示支持hash索引,是Memory表的默认索引类型,尽管Memory表也可以使用B-Tree索引。

索引的原理

BTree​(InnoDB和MyISAM)

  • BTree索引类型是基于B+Tree数据结构
  • B+Tree数据结构又是BTree数据结构的变种。通常使用在数据库和操作系统中的文件系统
  • 特点是能够保持数据稳定有序

磁盘存储

  • 系统从磁盘读取数据到内存时是以磁盘块( block )为基本单位的。

  • 位于同一个磁盘块中的数据会被一次性读取出来,而不是需要什么取什么。

  • ​ InnoDB存储引擎中有页( Page )的概念,页是其磁盘管理的最小单位InnoDB存储弓|擎中默认每个页的大小为16KB

  • ​ InnoDB弓|擎将若干个地址连接磁盘块,以此来达到页的大小16KB

  • 在查询数据时,一个页中的每条数据都能有助于定位​数据记录的位置,这将会减少磁盘I/O次数,提高查询效率

BTree

在这里插入图片描述
在每一个结点上除了去保存键值以外,还会去保存真实的数据,在进行查询数据时,只要涉及到相应的磁盘块,那这些数据也会被全部读取出来,所以导致效率不是很高。

B+Tree

特点:分支结点只保存键值,并`没有真实的数据,```真实的数据只会保存在叶子结点上``

磁盘块上并没有涉及到IO操作,提高了查询的特点

叶子结点之间进行连接,方便进行范围的查询

区别

BTree数据结构

  • 每个节点中不仅包含key值,还有数据。会增加查询数据时磁盘的I0次数。

B+Tree数据结构

  • 非叶子节点只存储key值。

  • 所有数据存储在叶子节点。

  • 所有叶子节点之间都有连接指针。

B+Tree好处

  • 提高查询速度。

  • 减少磁盘的I0次数。

  • 树型结构较小。

Hash索引(Memory)

Memory存储引擎支持非唯一hash索引,如果多个值有相同的hash code,索引把它们的行指针用链表保存到同一个hash表项中。

Hash索引的限制:

  • 索引仅包含hash code和记录指针
  • Hash索引不支持键的部分匹配,因为是通过整个索引值来计算hash值的。
  • 不能使用hash索引排序。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

?abc!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值