深入学习 Mysql 引擎 InnoDB、MyISAM

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: MySQL 引擎 InnoDB 和 MyISAM 是 MySQL 中常用的两种存储引擎,它们具有不同的特点,请看正文一一介绍。

博主介绍: ✌博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家✌

Java知识图谱点击链接:体系化学习Java(Java面试专题)

💕💕 感兴趣的同学可以收藏关注下不然下次找不到哟💕💕

image.png

1、InnoDB、MyISAM 区别

MySQL 引擎 InnoDB 和 MyISAM 是 MySQL 中常用的两种存储引擎,它们具有以下不同的特点:

  1. InnoDB 支持事务,而 MyISAM 不支持事务。

  2. InnoDB 支持行级锁定,而 MyISAM 支持表级锁定。在并发访问的情况下,InnoDB 的性能更好。

  3. InnoDB 支持外键约束,而 MyISAM 不支持外键约束。

  4. InnoDB 支持崩溃恢复和故障转移,而 MyISAM 不支持。

  5. InnoDB 支持自动增量列,而 MyISAM 也支持自动增量列。

综上所述,如果需要支持事务、外键约束和并发访问,以及更好的崩溃恢复和故障转移能力,建议使用 InnoDB 引擎。如果只是进行简单的数据存储和查询,并且需要更快的性能,可以考虑使用 MyISAM 引擎。但需要注意的是,MySQL 5.5 版本之后默认的存储引擎是 InnoDB,因此在选择存储引擎时需要考虑到版本的兼容性。

2、InnoDB

image.png

InnoDB 是 MySQL 数据库中的一种存储引擎,它是 MySQL 数据库默认的存储引擎之一。InnoDB 存储引擎支持事务、行级锁、多版本并发控制(MVCC)等高级特性,可以提供高并发、高可靠性和高性能的数据存储和访问能力。

InnoDB 存储引擎采用 B+ 树作为索引结构,支持主键、唯一键、普通索引等多种索引类型。同时,它还支持外键约束、自动增长列、全文索引等高级特性,可以满足各种复杂应用场景的需求。

在 InnoDB 存储引擎中,数据存储在表空间文件中,包括系统表空间文件和用户表空间文件。系统表空间文件包含 InnoDB 存储引擎的一些系统信息,如数据字典、Undo 日志等;用户表空间文件则包含用户创建的表、索引等数据。

3、InnoDB 为什么采用 B+ 树

image.png

InnoDB 存储引擎采用 B+ 树作为索引结构,B+ 树是一种多路平衡查找树,相比于 B 树,B+ 树具有以下几个优点:

  1. 减少磁盘 I/O 次数:B+ 树的非叶子节点不存储数据,只存储索引信息,因此可以存储更多的索引信息,减少磁盘 I/O 次数。
  1. 提高查询效率:B+ 树的叶子节点形成一个有序链表,可以快速进行范围查询和排序操作。

  2. 支持高并发:B+ 树的节点通常比较小,可以存储在内存中,减少锁冲突和等待时间。

InnoDB 存储引擎的 B+ 树索引结构包括以下几个部分:

  1. 根节点:通常只有一个,存储整个 B+ 树的基本信息。

  2. 中间节点:用于存储索引信息,包括索引值和指向下一级节点的指针。

  3. 叶子节点:存储实际的数据信息,包括主键值和数据行的地址。

  4. 辅助节点:用于存储锁信息和 MVCC 信息。

通过 B+ 树索引结构,InnoDB 存储引擎可以快速定位数据行,实现高效的查询和更新操作。

4、MyISAM

MyISAM 是 MySQL 数据库中的一种存储引擎,它是 MySQL 早期默认的存储引擎之一。MyISAM 存储引擎不支持事务、行级锁、多版本并发控制(MVCC)等高级特性,但它具有简单、高效、易于维护等特点,适用于一些对数据完整性要求不高、读写比例较高的应用场景。

MyISAM 存储引擎采用 B 树作为索引结构,支持主键、唯一键、普通索引等多种索引类型。同时,它还支持表级锁,即在写入数据时会锁定整个表,因此在高并发场景下可能会出现锁等待和死锁问题。

在 MyISAM 存储引擎中,数据存储在表文件中,包括数据文件和索引文件。数据文件存储实际的数据信息,而索引文件存储索引信息,包括索引值和指向数据文件中数据行的指针。
总的来说,MyISAM 存储引擎已经逐渐被 InnoDB 存储引擎所替代,但在一些特定的应用场景中,它仍然具有一定的优势。

5、InnoDB 和 MyISAM 在存储文件上的差异

InnoDB 和 MyISAM 存储引擎的文件差异主要表现在以下几个方面:

  1. 文件扩展名:InnoDB 存储引擎的表文件扩展名为 .ibd,而 MyISAM 存储引擎的表文件扩展名为 .MYD 和 .MYI。

  2. 存储结构:InnoDB 存储引擎的表文件包含数据文件和索引文件,而 MyISAM 存储引擎的表文件包含数据文件和索引文件,但是索引文件分为 .MYI 和 .MYD 两个文件,其中 .MYI 文件存储索引信息,.MYD 文件存储数据信息。

  3. 表空间:InnoDB 存储引擎的表空间文件包括系统表空间文件和用户表空间文件,而 MyISAM 存储引擎的表空间文件只包括数据文件和索引文件。

  4. 锁机制:InnoDB 存储引擎支持行级锁和事务,而 MyISAM 存储引擎只支持表级锁,因此在高并发场景下,InnoDB 存储引擎的性能要优于 MyISAM 存储引擎。

因为 InnoDB 的索引和数据都在一个文件中,所以它的索引称为聚簇索引,而MyISAM的索引和数据不在一起,因此成为非聚簇索引。InnoDB 存储引擎相比 MyISAM 存储引擎具有更加先进和完善的特性,因此在实际应用中,建议优先选择 InnoDB 存储引擎。

6、InnoDB SQL 的应用

下面是一个使用 InnoDB 存储引擎的 SQL 示例:
CREATE TABLE `orders` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL,
  `product_id` int(11) NOT NULL,
  `quantity` int(11) NOT NULL,
  `price` decimal(10,2) NOT NULL,
  `status` varchar(20) NOT NULL,
  `created_at` datetime NOT NULL,
  `updated_at` datetime NOT NULL,
  PRIMARY KEY (`id`),
  KEY `user_id` (`user_id`),
  KEY `product_id` (`product_id`),
  CONSTRAINT `orders_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `orders_ibfk_2` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

这个 SQL 创建了一个名为 orders 的表,用于存储订单信息。该表使用了 InnoDB 存储引擎,并定义了多个字段,包括订单 ID、用户 ID、商品 ID、数量、价格、状态、创建时间和更新时间等。此外,该表还定义了多个索引和外键,用于提高查询效率和保证数据一致性。

1686494501743.jpg

💕💕 本文由激流丶创作,原创不易,感谢支持!
💕💕喜欢的话记得点赞收藏啊!

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
12天前
|
SQL 关系型数据库 MySQL
Mysql基础学习day02-作业
本教程介绍了数据库表的创建与管理操作,包括创建员工表、插入测试数据、删除记录、更新数据以及多种查询操作,涵盖了SQL语句的基本使用方法,适合初学者学习数据库操作基础。
28 0
|
12天前
|
SQL 关系型数据库 MySQL
Mysql基础学习day03
本课程为MySQL基础学习第三天内容,主要讲解多表关系与多表查询。内容涵盖物理外键与逻辑外键的区别、一对多、一对一及多对多关系的实现方式,以及内连接、外连接、子查询等多表查询方法,并通过具体案例演示SQL语句的编写与应用。
31 0
|
12天前
|
存储 关系型数据库 MySQL
介绍MySQL的InnoDB引擎特性
总结而言 , Inno DB 引搞 是 MySQL 中 高 性 能 , 高 可靠 的 存 储选项 , 宽泛 应用于要求强 复杂交易处理场景 。
53 15
|
6天前
|
关系型数据库 MySQL 数据管理
Mysql基础学习day03-作业
本内容包含数据库建表语句及多表查询示例,涵盖内连接、外连接、子查询及聚合统计,适用于员工与部门数据管理场景。
20 1
|
6天前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎,提供高性价比、稳定安全的云数据库服务,适用于多种行业与业务场景。
|
15天前
|
SQL 关系型数据库 MySQL
Mysql基础学习day01-作业
本教程包含三个数据库表的创建练习:学生表(student)要求具备主键、自增长、非空、默认值及唯一约束;课程表(course)定义主键、非空唯一字段及数值精度限制;员工表(employee)包含自增主键、非空字段、默认值、唯一电话号及日期时间类型字段。每个表的结构设计均附有详细SQL代码示例。
30 0
|
15天前
|
SQL 关系型数据库 MySQL
Mysql基础学习day02
本课程为MySQL基础学习第二天内容,涵盖数据定义语言(DDL)的表查询、修改与删除操作,以及数据操作语言(DML)的增删改查功能。通过具体SQL语句与实例演示,帮助学习者掌握MySQL表结构操作及数据管理技巧。
66 0
|
21天前
|
安全 关系型数据库 MySQL
MySQL安全最佳实践:保护你的数据库
本文深入探讨了MySQL数据库的安全防护体系,涵盖认证安全、访问控制、网络安全、数据加密、审计监控、备份恢复、操作系统安全、应急响应等多个方面。通过具体配置示例,为企业提供了一套全面的安全实践方案,帮助强化数据库安全,防止数据泄露和未授权访问,保障企业数据资产安全。
|
6天前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
39 3
|
12天前
|
关系型数据库 MySQL 数据库
自建数据库如何迁移至RDS MySQL实例
数据库迁移是一项复杂且耗时的工程,需考虑数据安全、完整性及业务中断影响。使用阿里云数据传输服务DTS,可快速、平滑完成迁移任务,将应用停机时间降至分钟级。您还可通过全量备份自建数据库并恢复至RDS MySQL实例,实现间接迁移上云。

推荐镜像

更多