深入学习 Mysql 引擎 InnoDB、MyISAM

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

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

文章目录

  • 1、InnoDB、MyISAM 区别
  • 2、InnoDB
  • 3、InnoDB 为什么采用 B+ 树
  • 4、MyISAM
  • 5、InnoDB 和 MyISAM 在存储文件上的差异
  • 6、InnoDB SQL 的应用

深入学习 Mysql 引擎 InnoDB、MyISAM_第1张图片

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

深入学习 Mysql 引擎 InnoDB、MyISAM_第2张图片

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

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

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

3、InnoDB 为什么采用 B+ 树

深入学习 Mysql 引擎 InnoDB、MyISAM_第3张图片

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
喜欢的话记得点赞收藏啊

你可能感兴趣的:(Mysql,mysql,java,面试,innodb,myisam)