【进阶篇】MySQL 存储引擎详解

这篇具有很好参考价值的文章主要介绍了【进阶篇】MySQL 存储引擎详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


【进阶篇】MySQL 存储引擎详解,MySQL从入门到精通,mysql,数据库

0.前言

MySQL是世界上最受欢迎的开源关系数据库管理系统之一。MySQL的一个主要特性是其插件式存储引擎架构,这意味着你可以根据特定的工作负载和需求选择不同的存储引擎。

它支持多种存储引擎。下面将详细解释MySQL的存储引擎,包括InnoDBMyISAMMemory等。每种存储引擎都有其应用的场景和特点,选择哪种引擎取决于数据的特性和应用的需求。在设计数据库时,应该根据需要选择合适的存储引擎。

  1. InnoDB:InnoDB是MySQL的默认存储引擎。它提供了事务安全(ACID兼容)的表,并具有提交、回滚和崩溃恢复功能。InnoDB还支持行级锁定,外键约束等特性。由于它的事务安全特性和处理大量数据时的高性能,它通常用于大型应用。

  2. MyISAM:MyISAM是MySQL的另一种存储引擎。它是基于早期ISAM代码的扩展,提供了大量的功能,比如全文索引、压缩、空间函数等。然而,MyISAM不支持事务和行级锁定,只支持表级锁定,因此在数据安全性和并发性方面不如InnoDB。

  3. Memory:Memory存储引擎创建的表只存在于内存中,也就是说,当MySQL服务器关闭后,表中的数据会丢失。Memory引擎非常快,因为它避免了磁盘I/O,但它只支持HASH索引。这种存储引擎非常适合存储临时数据。

  4. NDB(或者叫做Cluster):NDB 是一个分布式存储引擎,主要用于创建高可用性的集群环境。NDB 支持数据的实时复制和冗余存储,因此它可以提供很高的可用性和可靠性。

  5. Blackhole:Blackhole存储引擎并不存储任何数据,但它会记录所有写操作的日志。这种引擎常用于复制数据到从服务器或者用于审计。

  6. Archive:Archive存储引擎用于存储和检索大量的归档数据。它使用gzip算法进行压缩,从而节省存储空间。然而,Archive只支持INSERT和SELECT操作,不支持DELETE和UPDATE操作。

1.基础介绍

存储引擎 功能描述 使用场景 优点 缺点
InnoDB 支持事务处理、行级锁定、外键,以及崩溃后的安全恢复。 适用于需要事务处理的系统,如电子商务、银行等。 具有提交、回滚、崩溃恢复能力,支持行级锁定,提高并发性能。 占用的磁盘空间相对较大,内存需求也较大。
MyISAM 不支持事务处理、表级锁定、全文搜索,以及压缩数据的能力。 适用于只读或者插入新记录的系统,如博客、新闻发布等。 占用的磁盘空间和内存较小,处理速度快。 不支持事务处理,数据易丢失。
Memory 所有的数据都存储在内存中,数据的处理速度快,但是数据在MySQL重启后会丢失。 适用于临时数据存储和缓存。 数据处理速度快。 存储空间有限,数据不持久化。
Archive 适用于存储和检索大量的归档数据,如日志信息。 适用于大量的归档数据,如日志信息。 数据压缩,节省存储空间。 不支持事务,只支持插入和选取操作。
Blackhole 黑洞引擎,数据写入后即消失,可以用于复制数据库。 适合在主从复制时,只做记录用。 不占用存储空间。 数据不可恢复。
Federated 分布式存储引擎,可以访问远程的MySQL表就像本地一样。 适用于分布式数据存储。 可以访问远程数据。 网络延迟和稳定性会影响数据访问。
CSV CSV存储引擎,存储的数据是以文本的形式存放。 适用于数据的导入导出。 可以直接用文本编辑器查看和编辑数据。 不支持索引。
NDB MySQL集群存储引擎,提供事务性存储引擎。 适用于大型网络应用。 支持大规模并发处理。 配置和管理复杂。

2.1. InnoDB存储引擎底层原理

【进阶篇】MySQL 存储引擎详解,MySQL从入门到精通,mysql,数据库

InnoDB是MySQL默认的存储引擎,它的底层原理主要包括以下几个方面:

  1. 事务支持:InnoDB支持ACID事务模型,能够提供提交(commit)、回滚(rollback)和恢复(recovery)等功能。InnoDB在每个事务中都使用了一个事务日志来记录事务中所有的更改。如果在事务完成之前数据库崩溃,InnoDB能够使用事务日志来恢复数据库的状态。

  2. MVCC:InnoDB使用多版本并发控制(MVCC)来管理并发事务。MVCC允许多个读写事务并发执行,而不需要进行加锁操作,从而提高了数据库的并发性能。

  3. 行级锁定:InnoDB支持行级别的锁定,这是一个重要的区别于其他如MyISAM等存储引擎的特性。行级锁定可以大大提高数据库的并发性能,因为在进行数据更改时,只有被更改的数据行被锁定,其他行仍然可以被其他事务访问。

  4. 索引:InnoDB存储引擎使用B+树作为其索引的数据结构,特别是,其主键索引是聚簇索引,这意味着主键索引的叶子节点就是实际的数据行。这样的设计使得按主键的查询非常快,但是非主键的查询则需要两次索引查找,一次是在非主键索引上,一次是在主键索引上。

  5. 数据存储:InnoDB将数据存储在表空间中。表空间可以包含多个数据文件,这些数据文件可以在磁盘上的不同位置。

  6. 内存缓存:InnoDB具有一个内置的缓冲池,用来缓存表数据和索引数据。这些数据在被访问时会被加载到缓冲池中,这可以大大提高数据库的性能。

InnoDB记录存储结构和索引页结构

InnoDB记录存储结构:

  1. 记录头信息:每条记录前都有一些额外的信息,包含了当前记录的信息,例如记录的长度,记录所在的行是否删除等。

  2. 记录数据:保存的是表中的行记录,即用户实际的数据。

  3. 尾部信息:记录了一些校验信息,如新字段的值的校验和。

  4. 下一记录的指针:指向下一条记录。

  5. 上一记录的指针:指向上一条记录。

InnoDB索引页结构:

  1. 页面头部:存储了一些管理页面的信息,如页面类型,记录的数量,记录的地址等。

  2. Infimum 和 Supremum 记录:Infimum 记录是页中记录的下限,Supremum 记录是页中记录的上限。

  3. 用户记录:保存的是表中的行记录,即用户实际的数据。

  4. Free Space:空闲空间,用于存储新的记录。

  5. 页面目录:页目录保存了页中所有记录主键值的位置信息,用于加速表的查找。

  6. 页面尾部:保存了页的校验码。
    .

3. MVCC 详解

MVCC(Multi-Version Concurrency Control)是MySQL中用于实现并发控制的机制。它通过为每个事务提供一个独立的数据版本来保证事务的隔离性和一致性。下面是MySQL MVCC的详细解释:

3.1. 版本号分配:

  • 在每个数据行中,MySQL会为每个修改操作(插入、更新、删除)分配一个唯一的版本号或时间戳。
  • 版本号可以是递增的事务ID或其他类型的时间戳。

3.2. 数据读取:

  • 当事务开始时,会记录当前事务的开始时间戳或ID。
  • 在读取数据时,MySQL只会向事务展示在其开始时间戳之前的数据版本。
  • 这意味着事务不会读取到其他并发事务修改的数据。

3.3. 数据写入:

  • 当事务对数据进行修改时,MySQL会生成一个新的数据版本并将其写入数据库。
  • 新版本会被分配一个新的版本号或时间戳。
  • 原始数据版本仍然存在,对于其他事务仍然可见。

3.4. 事务隔离级别:

  • MVCC支持MySQL的多个事务隔离级别,如读未提交、读已提交、可重复读和串行化。
  • 在不同的隔离级别下,MySQL的MVCC机制会根据需求来决定哪些数据版本对事务可见,以保证事务的隔离性和一致性。

3.5. 数据清理:

  • 当事务完成后,MySQL会根据需要进行数据清理。
  • 已提交的事务产生的旧数据版本将被清理,释放存储空间。
  • 未提交的事务产生的数据版本仍然存在,直到事务提交或回滚。

MVCC机制使得不同的事务可以并发地读取和修改数据,而不会相互干扰或产生不一致的结果。它提供了更高的并发性和隔离性,减少了锁的竞争,提高了数据库的性能。然而,需要注意的是,MVCC机制会占用一定的存储空间来维护多个数据版本,因此在设计数据库时需要考虑存储需求。

MVCC 不是MySQL的特有机制,除了MySQL 使用了MVCC机制,其他数据库版本也使用了 以下是一些采用了多版本并发控制(MVCC)策略的数据库:

  1. PostgreSQL:它使用 MVCC 提供多个并发用户间的一致性视图。

  2. MySQL:在可重复读取隔离级别下,MySQL的InnoDB存储引擎利用 MVCC 解决读写冲突,提供快照数据而非最新数据。

  3. Oracle:尽管Oracle使用了MVCC,但其实现方法与PostgreSQL和MySQL的InnoDB不同。在Oracle中,读操作不会阻塞写操作,反之亦然。

  4. SQLite:SQLite使用了"snapshot isolation",它的核心概念与MVCC相似,都是在事务开始时提供一个快照,而非实时数据。

  5. CouchDB 和 MongoDB:这两个NoSQL数据库也采用了MVCC或类似技术。

  6. Apache HBase:作为开源的非关系型分布式数据库,HBase是Google BigTable的Java实现,也使用了MVCC。

  7. Apache Cassandra:这是Facebook开发的一款开源分布式NoSQL数据库系统,用于满足高速读写需求,如Inbox搜索,它也实现了MVCC。

  8. MariaDB:作为MySQL的一个开源分支版本,MariaDB的InnoDB存储引擎也使用了MVCC。

  9. Microsoft SQL Server:在读已提交快照和快照隔离级别下,SQL Server使用了MVCC。

  10. Hyperledger Fabric:这是一个开源的区块链平台,它使用了MVCC来解决交易冲突。

  11. Tarantool:作为一个开源的NoSQL数据库和Lua应用服务器,Tarantool使用了MVCC。

  12. Greenplum:基于PostgreSQL开发的大规模并行处理数据库管理系统Greenplum也实现了MVCC。

  13. Firebird:作为一个提供众多SQL标准特性的关系数据库,Firebird也实现了MVCC。

  14. SAP HANA:这是一个基于内存的关系数据库管理系统,同样实现了MVCC。

参考资料

  1. 官方文档:MySQL官方网站提供了关于各种存储引擎的详细文档,包括InnoDB和MyISAM等。https://dev.mysql.com/doc/refman/8.0/en/storage-engines.html

  2. 书籍:《高性能MySQL》是一本非常全面的关于MySQL性能优化、架构设计和内部机制的书籍,其中包含了大量关于存储引擎的内容。文章来源地址https://www.toymoban.com/news/detail-701917.html

到了这里,关于【进阶篇】MySQL 存储引擎详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [MySQL--进阶篇]存储引擎的体系结构、简介、特点、选择

    ⭐Hello!这里是欧_aita的博客。 ⭐今日语录: 不要在乎别人怎么看你,因为他们根本就没有时间,他们只关心他们自己。 ⭐个人主页:欧_aita ψ(._. )⭐个人专栏: 数据结构与算法 MySQL数据库 连接层 (连接池)最上层是一些客户端和链接服务,主要完成类似于连接处理、授权认

    2024年02月04日
    浏览(71)
  • 【MySQL数据库 | 第十六篇】存储引擎

    目录  前言:  MySQL体系结构图: 存储引擎简介: 1. InnoDB存储引擎: 2. MyISAM存储引擎: 3. MEMORY存储引擎: 4. NDB Cluster存储引擎: 5. ARCHIVE存储引擎: 存储引擎语法: ACID与行级锁:  总结: 经过前面15篇的学习,我们已经学完了SQL的基本语法内容,大致掌握了数据库的操作

    2024年02月08日
    浏览(55)
  • Mysql数据库的存储引擎——必看教程

    目录 一、什么是存储引擎 二、MySQL支持的存储引擎 三、常见的存储引擎 1.InnoDB存储引擎         2.MyISAM存储引擎         3.MEMORY存储引擎 四、选择存储引擎 总结  ✨✨✨大家好,我是会飞的鱼-blog,今天我来给大家介绍一下Mysql,有不足之处,请大家多多指教。感谢大

    2024年02月03日
    浏览(44)
  • 【后端面经-数据库】MySQL的存储引擎简介

    目录 MySQL的存储引擎 0. 存储引擎的查看和修改 1. MyISAM 2. InnoDB 3. MEMORY 4. MERGE 5. 总结 6. 参考博客 mysql主要有四类存储引擎,目前主要使用InnoDB作为存储引擎。 查看当前数据库的默认存储引擎 查看当前数据库所支持的存储引擎 查看支持事务处理的存储引擎 设置新表的存储引擎

    2024年02月08日
    浏览(48)
  • MySQL高级-存储引擎+存储过程+索引(详解01)

    目录 1.mysql体系结构  2.存储引擎 2.1.存储引擎概述 2.2.1.InnoDB 2.2.2.MyISAM 2.2.3.存储引擎选择 3.存储过程 3.1.存储过程和函数概述  3.2.创建存储过程 3.3.调用存储过程 3.4.查看存储过程 3.5.删除存储过程 3.6.语法 3.6.1.变量 3.6.2.if条件判断 3.6.3.传递参数 3.6.4.case结构 3.6.5.while循环 3.

    2024年02月13日
    浏览(44)
  • MySQL数据库入门到精通1--基础篇(MySQL概述,SQL)

    目前主流的关系型数据库管理系统: Oracle:大型的收费数据库,Oracle公司产品,价格昂贵。 MySQL:开源免费的中小型数据库,后来Sun公司收购了MySQL,而Oracle又收购了Sun公司。 目前Oracle推出了收费版本的MySQL,也提供了免费的社区版本。 SQL Server:Microsoft 公司推出的收费的中

    2024年02月07日
    浏览(50)
  • MySQL数据库,从入门到精通:第四篇——MySQL中常用的运算符及其用法

    目录层级 MySQL数据库,从入门到精通:第一篇——MySQL概念详解 MySQL数据库,从入门到精通:第二篇——MySQL关系型数据库与非关系型数据库的比较 MySQL数据库,从入门到精通:第三篇——MySQL 数据库规范和基础查询语句 MySQL数据库,从入门到精通:第四篇——MySQL中常用的运

    2024年02月08日
    浏览(108)
  • 【100天精通python】Day44:python网络爬虫开发_爬虫基础(爬虫数据存储:基本文件存储,MySQL,NoSQL:MongDB,Redis 数据库存储+实战代码)

    目录 1 数据存储 1.1 爬虫存储:基本文件存储 1.2 爬虫存储:使用MySQL 数据库 1.3 爬虫 NoSQL 数据库使用 1.3.1 MongoDB 简介

    2024年02月11日
    浏览(73)
  • 【一文详解】知识分享:(MySQL关系型数据库知识进阶)

    Mysql体系结构: 连接层 位于最上层,是一些客户端和连接服务,主要完成一些类似于连接处理,授权认证及相关的安全方案。 服务器也会为安全接入的每个客户端验证它所具有的操作权限。 服务层 第二层,主要完成大多数的核心服务功能,如sql接口,并完成缓存的查询,sql的分析和优

    2024年02月02日
    浏览(77)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包