2024-11-09  阅读(5)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://www.skjava.com/mianshi/baodian/detail/1167651048

回答

MySQL 的默认存储引擎从 5.5 版本开始被设置为 InnoDB。主要原因是其具有高可靠和高性能特点,具体如下:

  • 事务支持:InnoDB 支持事务处理,遵循 ACID 原则,这对于数据的准确性至关重要。
  • 行级锁定和 MVCC:相比于 MyISAM 的表级锁,InnoDB 提供了行级锁定。行级锁定减少数据库操作间的锁定竞争,提高了 MySQL 的并发。同时,通过多版本并发控制(MVCC)机制,InnoDB 能有效降低锁的竞争,提升读取性能。
  • **支持聚簇索引:**InnoDB 使用聚簇索引作为其主要数据存储机制,它将数据行直接存储在主键索引的叶子节点,可减少数据访问 IO 次数,提升查询性能。
  • 外键约束:InnoDB 支持外键约束,通过外键约束,可确保数据之间的关联性和一致性,这对于维护数据库的引用完整性非常重要。
  • 崩溃恢复能力:InnoDB 通过日志文件和缓冲池的设计,使得 MySQL 具备了非常好的恢复能力。即便系统发生故障,也能保证数据不丢失,快速恢复到故障发生前的状态。

扩展

MySQL 不同存储引擎对比:

存储引擎 支持事务 外键支持 锁级别 适用场景
InnoDB 行级 适合大多数场景,尤其是需要高可靠性和性能的应用
MyISAM 表级 读多写少的应用,简单的Web应用
MEMORY 表级 临时表,需要快速访问非关键数据的场景
Federated 访问远程 MySQL服务器上的数据
CSV 表级 与使用 CSV 格式的应用程序进行数据导入导出
Archive 行级 存储大量的归档或历史数据
Blackhole 复制设置中,数据不需要本地存储的场景
NDB 行级 高可用性和高性能的分布式数据库场景

InnoDB 架构

从 MySQL 官网的架构图可以看到 InnoDB 主要分为内存结构和磁盘结构。主要包含如下核心组件:

1、缓冲池(Buffer Pool)

InnoDB 使用缓冲池来缓存数据和索引,减少对磁盘的读写操作。这是提高数据库性能的关键因素之一,因为内存访问速度远快于磁盘。

2、日志缓存区(Log Buffer)

事务日志首先会写入日志缓冲区,随后异步地刷新到磁盘上的日志文件中。这种机制为 InnoDB 的持久性和快速恢复提供保证。

3、重做日志(Redo Log)

Redo Log 在数据库发生崩溃时重做事务,确保事务的持久性。Redo Log 是 InnoDB 实现事务ACID属性中的"D"(持久性)的关键。

4、撤销日志(Undo Log)

Undo Log 支持事务的回滚和多版本并发控制(MVCC)。Undo Log 记录了事务开始前的数据状态,如果事务失败或被回滚,可以利用 Undo Log 恢复数据。

5、双写缓存区(Doublewrite Buffer)

Doublewrite Buffer 用于防止半页写失败导致的数据损坏。在写入数据页到磁盘之前,首先将数据写入双写缓冲区,然后再写入实际的数据页位置。

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

InnoDB 会根据表的访问模式,动态创建哈希索引以加快访问速度。这是一个优化读操作性能的高级特性。

7、后台线程

InnoDB 有多个后台线程负责如清理、合并插入缓冲、刷新缓冲池中的脏页到磁盘等任务,以保证系统运行效率。


Java 面试宝典是大明哥全力打造的 Java 精品面试题,它是一份靠谱、强大、详细、经典的 Java 后端面试宝典。它不仅仅只是一道道面试题,而是一套完整的 Java 知识体系,一套你 Java 知识点的扫盲贴。

它的内容包括:

  • 大厂真题:Java 面试宝典里面的题目都是最近几年的高频的大厂面试真题。
  • 原创内容:Java 面试宝典内容全部都是大明哥原创,内容全面且通俗易懂,回答部分可以直接作为面试回答内容。
  • 持续更新:一次购买,永久有效。大明哥会持续更新 3+ 年,累计更新 1000+,宝典会不断迭代更新,保证最新、最全面。
  • 覆盖全面:本宝典累计更新 1000+,从 Java 入门到 Java 架构的高频面试题,实现 360° 全覆盖。
  • 不止面试:内容包含面试题解析、内容详解、知识扩展,它不仅仅只是一份面试题,更是一套完整的 Java 知识体系。
  • 宝典详情:https://www.yuque.com/chenssy/sike-java/xvlo920axlp7sf4k
  • 宝典总览:https://www.yuque.com/chenssy/sike-java/yogsehzntzgp4ly1
  • 宝典进展:https://www.yuque.com/chenssy/sike-java/en9ned7loo47z5aw

目前 Java 面试宝典累计更新 400+ 道,总字数 42w+。大明哥还在持续更新中,下图是大明哥在 2024-12 月份的更新情况:

想了解详情的小伙伴,扫描下面二维码加大明哥微信【daming091】咨询

同时,大明哥也整理一套目前市面最常见的热点面试题。微信搜[大明哥聊 Java]或扫描下方二维码关注大明哥的原创公众号[大明哥聊 Java] ,回复【面试题】 即可免费领取。

阅读全文