MySQL—MySQL的存储引擎之InnoDB

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

MySQL—MySQL的存储引擎之InnoDB

存储引擎及种类

存储引擎 说明
MyISAM 高速引擎,拥有较高的插入,查询速度,但不支持事务
InnoDB 5.5版本后MySQL的默认数据库存储引擎,支持事务和行级锁,比MyISAM处理速度稍慢
ISAM MyISAM的前身,MySQL5.0以后不再默认安装
MRG_MyISAM 将多个表联合成一个表使用,在超大规模数据存储时很有用
Memory 内存存储引擎,拥有极高的插入,更新和查询效率。但是会占用和数据量成正比的内存空间。只在内存上保存数据,意味着数据可能会丢失
Archive 将数据压缩后进行存储,非常适合存储大量的独立的,作为历史记录的数据,但是只能进行插入和查询操作
CSV CSV 存储引擎是基于 CSV 格式文件存储数据(应用于跨平台的数据交换)

怎么选择存储引擎?

除非需要用到某些InnoDB不具备的特性,并且没有其他办法可以替代,否则都应该选择InnoDB引擎。(大部分情况下都选择InnoDB。)

InnonDB和MyISAM的比较

比较项 InnonDB MyISAM
存储文件 .frm是表定义文件
.ibd是数据文件和索引文件
.frm是表定义文件
.myd数据文件
.myi是索引文件
支持表锁、行锁 支持表锁
是否支持外键 支持外键 不支持外键
是否支持事务 支持 不支持
CRUD 读、写 读多
索引结构 B+Tree B+Tree
show engines;

MySQL—MySQL的存储引擎之InnoDB,MySQL,mysql,数据库

InnonDB架构

InnonDB架构图如下:

MySQL—MySQL的存储引擎之InnoDB,MySQL,mysql,数据库

从图中可见,InnoDB存储引擎由内存结构、磁盘结构两部分组成。

内存结构

lnnoDB内存结构主要分为如下四个区域:

  1. Buffer Pool缓冲池
  2. Change Buffer修改缓冲
  3. Adaptive Hash lndex自适应索引
  4. Log Buffer日志缓冲
缓冲池(Buffer Pool)

缓冲池Buaffer Pool用于加速数据的访问和修改,通过将热点数据缓存在内存的方法最大限度地减少磁盘IO,加速热点数据读写。

  • 默认大小为128M,Buffer Pool中数据以页为存储单位,其实现的数据结构是以页为单位的单链表。
  • 由于内存的空间限制,Buffer Pool仅能容纳最热点的数据。
  • Buffer Pool使用LRU算法 (Least Recently Used最近最少使用)淘汰非热点数据页。
  • LRU:根据页数据的历史访问来淘汰数据,如果数据最近被访问过,那么将来被访问的几率也更高,优先淘汰最近没有被访问到的数据。
  • 对于Buffer Pool中数据的查询,InnoDB直接读取返回。对于Buffer Pool中数据的修改,lnnoDB直接在Buffer Pool中修改,并将修改写入redo log。
修改缓冲(Change Buffer)

用于加速非热点数据中二级索引的写入操作。

修改缓冲对二级索引的修改操作会录入redo log中。

在缓冲到一定量或系统较空闲时进行merge操作(写入磁盘) ;

其物理结构为一棵名为ibuf的B+树。

自适应哈希索引(Adaptive Hash Index)

用于实现对于热数据页的一次查询,是建立在索引之上的索引。

作用:对频繁查询的数据页和索引页进一步提速

AHI大小为Buffer Pool的1/64

对于二级索引,若命中 AHI,则将直接从 AHI 获取二级索引页的记录指针,再根据主键沿着聚簇索引查找数据;若聚簇索引查询同样命中 AHI,则直接返回目标数据页的记录指针,此时就可以根据记录指针直接定位数据页。

MySQL—MySQL的存储引擎之InnoDB,MySQL,mysql,数据库

日志缓冲(Log Buffer)

InnoDB使用Log Buffer 来缓冲日志文件的写入操作。内存写入加上日志文件顺序写的特点,使得InnoDB日志写入性能极高。

这种将分散操作改为批量操作的优化方式将增加数据丢失的风险。

磁盘文件之表空间

在磁盘中,InnoDB将所有数据都逻辑地存放在一个空间中,称为表空间(Tablespace)。表空间由段(Segment) 、区(extent) 、页(Page)组成。

  • 开启独立表空间innodb_file_per_table=1,每张表的数据都会存储到一个独立表空间,即表名.ibd文件
  • 关闭独占表空间innodb_file_per_table=0,则所有基于InnoDB存储引擎的表数据都会记录到系统表空间,即ibdata1文件

表空间是 InnoDB 物理存储中的最高层,目前的表空间类别包括:

  • 系统表空间(System Tablespace)
  • 独立表空间(File-per-table Tablespace)
  • 通用表空间(General Tablespace)
  • 回滚表空间(Undo Tablespace)
  • 临时表空间(The Temporary Tablespace)

MySQL—MySQL的存储引擎之InnoDB,MySQL,mysql,数据库

磁盘文件之存储结构

MySQL—MySQL的存储引擎之InnoDB,MySQL,mysql,数据库

内存数据落盘

MySQL—MySQL的存储引擎之InnoDB,MySQL,mysql,数据库文章来源地址https://www.toymoban.com/news/detail-859266.html

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

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

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

相关文章

  • MySQL高级10-InnoDB引擎存储架构

    表空间(Tablespace):一个mysql实例,及一个数据库实例,可以对应多个表空间(ibd文件),用于存储记录,索引等数据。 段(Segment):分为数据段(Leaf node segment)、索引段(Non-leaf node segment)、回滚段(Rollback segment),InnoDB是索引组织表,数据段就是B+树的叶子节点(Leaf node segment),

    2024年02月08日
    浏览(46)
  • mysql--InnoDB存储引擎--架构和事务

    MySQL进阶篇 InnoDB 逻辑存储单元主层级关系图: 1、表空间 表空间是InnoDB存储引擎逻辑结构的最高层, 如果用户启用了参数 innodb_file_per_table(在 8.0版本中默认开启) ,则每张表都会有一个表空间(xxx.ibd),一个mysql实例可以对应多个表空间,用于存储记录、索引等数据。 2、段

    2024年02月14日
    浏览(48)
  • 【MYSQL】存储引擎MyISAM和InnoDB

    查看MySQL提供所有的存储引擎 mysql show engines; mysql常用引擎包括:MYISAM、Innodb、Memory、MERGE 1、MYISAM:全表锁,拥有较高的执行速度,不支持事务,不支持外键,并发性能差,占用空间相对较小,对事务完整性没有要求,以select、insert为主的应用基本上可以使用这引擎 2、Innod

    2024年01月18日
    浏览(43)
  • 【MySQL】 深入了解InnoDB存储引擎的限制

    目录 列数限制 索引数限制 InnoDB的行格式和索引限制 示例和注意事项 **页大小对索引键前缀长度的影响 **对全列索引键的限制 多列索引限制 行大小限制 InnoDB log限制 表空间大小限制 表数量限制 操作系统限制 文件大小和日志文件大小 文件层级限制 随着数据库技术的不断发

    2024年01月24日
    浏览(50)
  • MySQL存储引擎InnoDB和MyISAM的区别?

    InnoDB和MyISAM是MySQL数据库两种常见的存储引擎,它们在性能、事务支持等方面有一些重要的区别。以下是它们的一些主要区别: 事务支持: InnoDB: 支持事务,具有ACID(原子性、一致性、隔离性、持久性)特性,适用于需要事务支持的应用,如银行、电商等。 MyISAM: 不支持

    2024年02月03日
    浏览(52)
  • MySQL之深入InnoDB存储引擎——Checkpoint机制

    由于页的操作首先都是在缓冲池中完成的,那么如果一条DML语句改变了页中的记录,那么此时页就是脏的,即缓冲池中页的版本要比磁盘的新。那么数据库需要将新版本的页刷新到磁盘。倘若每次一个页发生变化就刷新,那么开销会很大,若热点数据集中在某几个页中,那么

    2024年02月15日
    浏览(42)
  • MySQL 存储引擎 InnoDB 内存结构之缓冲池

    缓冲池是主存储器中的一个区域,在访问 table 和索引数据时 InnoDB 会对其进行缓存。缓冲池允许直接从内存中访问频繁使用的数据,从而加快处理速度。在专用服务器上,通常将高达 80% 的物理内存分配给缓冲池。 为了高效处理大量读取操作,缓冲池被划分为可以容纳多行

    2024年02月10日
    浏览(42)
  • MySQL 数据库存储引擎

    目录 一、存储引擎简介 二、MyISAM存储引擎 1、MylSAM介绍 2、MyISAM表支持3种不同的存储格式 3、MylSAM的特点 4、MyISAM使用的生产场景 三、InnoDB存储引擎 1、InnoDB介绍 2、InnoDB的特点 3、InnoDB适用生产场景 4、MyISAM和InnoDB的区别 四、查看和修改存储引擎 1、查看系统支持的存储引擎

    2023年04月25日
    浏览(65)
  • MySQL高级篇(存储引擎InnoDB、MyISAM、Memory)

    目录 1、存储引擎简介 1.1、查询建表语句,默认存储引擎:InnoDB 1.2、查看当前数据库支持的存储引擎 1.3、创建表,并指定存储引擎 2、 存储引擎-InnoDB介绍 2.1、存储引擎特点  3、MyISAM存储引擎  4、Memory存储引擎  5、InnoDB、MyISAM、Memory的区别  6、存储引擎的选择 介绍:In

    2024年04月11日
    浏览(46)
  • MySQL数据库之存储引擎

    MySQL中的数据用各种不下同的技术存储在文件中,每一种技术都使用不同的存储机制、索引技巧、锁定水平并最终提供不同的功能和能力,这些不同的技术以及配套的功能在MySQL中称为存储引擎。 存储引擎是MySQL将数据存储在文件系统中的存储方式或者存储格式。 存储引擎是

    2024年02月03日
    浏览(57)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包