深入学习 Mysql 引擎 InnoDB、MyISAM

tip:作为程序员一定学习编程之道,一定要对代码的编写有追求,不能实现就完事了。我们应该让自己写的代码更加优雅,即使这会费时费力。

💕💕 推荐:体系化学习Java(Java面试专题)

在这里插入图片描述

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

在这里插入图片描述

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

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

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

3、InnoDB 为什么采用 B+ 树

在这里插入图片描述

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

  1. 减少磁盘 I/O 次数:B+ 树的非叶子节点不存储数据,只存储索引信息,因此可以存储更多的索引信息,减少磁盘 I/O 次数。

  2. 提高查询效率:B+ 树的叶子节点形成一个有序链表,可以快速进行范围查询和排序操作。

  3. 支持高并发: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、数量、价格、状态、创建时间和更新时间等。此外,该表还定义了多个索引和外键,用于提高查询效率和保证数据一致性。

💕💕 本文由激流原创,首发于CSDN博客,博客主页 https://blog.csdn.net/qq_37967783?spm=1010.2135.3001.5421
💕💕喜欢的话记得点赞收藏啊

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

激流丶

感觉小弟写的不错,给点鼓励

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

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

打赏作者

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

抵扣说明:

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

余额充值