MySQL ⽀持哪些存储引擎?默认使⽤哪个?MyISAM 和 InnoDB 引擎有什么区别,如何选择?

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: MySQL ⽀持哪些存储引擎?默认使⽤哪个?MyISAM 和 InnoDB 引擎有什么区别,如何选择?

🌊MySQL存储引擎比较(官方)

   💧MySQL 支持多种存储引擎,包括 InnoDB、MyISAM、MEMORY、CSV 等。默认情况下,MySQL 使用的存储引擎是 InnoDB。

   💧MyISAM 和 InnoDB 是 MySQL 中最常用的两种存储引擎,它们有以下区别:

  1. 锁定方式不同:MyISAM 使用表级锁定,而 InnoDB 使用行级锁定。在并发访问时,InnoDB 的锁定方式更加精细,可以避免锁定整个表,提高了并发性能。
  2. 数据完整性不同:MyISAM 不支持事务和外键约束,而 InnoDB 支持事务和外键约束,可以保证数据的完整性和一致性。
  3. 读写性能不同:MyISAM 的读写性能相对较高,适合于读密集型应用;而 InnoDB 的写性能相对较高,适合于写密集型应用。
  4. 空间利用率不同:MyISAM 不支持行级别的存储,存储空间利用率较低;而 InnoDB 支持行级别的存储,存储空间利用率更高。

   💧在选择 MyISAM 和 InnoDB 引擎时,需要考虑应用场景和需求:

  1. 如果应用主要是读操作,可以考虑选择 MyISAM 引擎,以提高读取性能。
  2. 如果应用主要是写操作或需要支持事务和外键约束,可以考虑选择 InnoDB 引擎,以保证数据的完整性和一致性。
  3. 如果需要高性能和高可用性,可以考虑选择使用 MySQL 集群或使用多个副本实例,并将数据分布在不同的节点上。

   💧总结:MySQL 支持多种存储引擎,MyISAM 和 InnoDB 是其中最常用的两种,它们有不同的特点和优缺点,在选择时需要根据应用场景和需求进行考虑和权衡。


🌊通俗讲解(版本一)

MySQL支持哪些存储引擎?

   💧MySQL 支持多种存储引擎,默认为 InnoDB。其中最常用的是 InnoDB 和 MyISAM,它们有以下区别:

  1. 事务支持:InnoDB 支持事务操作,而 MyISAM 不支持事务。
  2. 外键支持:InnoDB 支持外键,而 MyISAM 不支持外键。
  3. 锁定方式:InnoDB 支持行级锁和表级锁,而 MyISAM 只支持表级锁。
  4. 数据库崩溃恢复:InnoDB 支持数据库异常崩溃后的安全恢复(redo log),而 MyISAM 不支持。
  5. 性能比较:InnoDB 的性能较强,无论在读写混合模式下还是只读模式下,随着 CPU 核数的增加,InnoDB 的读写能力呈线性增长。而 MyISAM 因为读写不能并发,处理能力与核数无关。
  6. 索引实现方式:InnoDB 和 MyISAM 都使用 B+ 树来实现索引,但实现方式不同。

如何选择存储引擎?

在读密集的情况下,如果不需要事务支持,也不需要保证数据库的崩溃恢复,可以选择 MyISAM。在其他情况下,可以放心使用 InnoDB。

   💧《MySQL 高性能》一书中有这样的描述:

“不要轻易相信‘MyISAM 比 InnoDB 快’之类的经验之谈,这个结论往往不是绝对的。在很多我们已知场景中,InnoDB 的速度都可以让 MyISAM 望尘莫及,尤其是使用了聚簇索引,或者需要访问的数据都可以放入内存的应用。”


🌊通俗讲解(版本二)

   💧MySQL ⽀持多种存储引擎,每种存储引擎都有各⾃的优缺点。常⽤的存储引擎有 InnoDB、MyISAM、Memory、Merge、Archive、CSV、BLACKHOLE。其中,InnoDB 是 MySQL 默认的存储引擎。可以使⽤命令 SHOW ENGINES 查看当前数据库⽀持的存储引擎。

SHOW ENGINES
• 1

MySQL支持的存储引擎的详细介绍:

  1. InnoDB:MySQL默认的存储引擎,支持事务、行级锁机制和外键约束。适合处理大量数据和高并发的应用场景,但对于频繁的全表扫描和大量的写操作,性能可能不如MyISAM。
  2. MyISAM:MySQL最早提供的存储引擎,不支持事务、行级锁机制和外键约束。但对于只读或者大量的查询操作,性能比InnoDB更好。
  3. Memory:这种类型的数据表只存在于内存中,使用散列索引,数据的存取速度非常快。由于存在于内存中,因此这种类型常应用于临时表中。
  4. Merge:将多个相同的MyISAM表合并为一个虚表,常应用于日志和数据仓库。
  5. Archive:适用于对于只偶尔需要查询的历史数据进行存储,将数据进行压缩存储,占用空间小,但不支持索引和更新操作。
  6. CSV:将数据以CSV格式存储,适合用于导入和导出数据。
  7. BLACKHOLE:这种存储引擎不实际存储数据,所有写入的数据都会被丢弃,但可以记录数据的写入日志。

   💧可以通过CREATE TABLE语句创建表时指定使用的存储引擎,例如:

CREATE TABLE table_name (column1 datatype, column2 datatype, ...) ENGINE = engine_name;

   💧以上是MySQL支持的存储引擎的介绍。根据不同的需求和应用场景,可以选择适合的存储引擎来优化数据库性能和功能。

CREATE TABLE mytable (id INT, name VARCHAR(20)) ENGINE=InnoDB;

   💧使⽤ SHOW CREATE TABLE 语句可以查看表的创建语句,其中包含了使⽤的存储引擎。例如:

SHOW CREATE TABLE mytable;

   💧输出结果中包含了 ENGINE=InnoDB。

存储引擎选择

   💧 InnoDBMyISAM是两种常见的存储引擎,它们之间有以下区别。选择存储引擎取决于应用程序的需求和特点:

  1. 事务支持:InnoDB支持事务处理,可以使用ACID(原子性、一致性、隔离性、持久性)来保证数据的完整性和一致性。而MyISAM不支持事务处理,不能保证数据的一致性。如果需要使用事务,应选择InnoDB。
  2. 锁机制:InnoDB采用行级锁定,只锁定需要修改的行,提高并发性能。而MyISAM采用表级锁定,会锁定整个表,如果多个用户同时访问一个表,就会出现互相等待的情况,降低并发性能。如果需要高并发性能,应选择InnoDB。
  3. 外键约束:InnoDB支持外键约束,可以通过外键约束实现关联查询和级联删除等功能。而MyISAM不支持外键约束。如果需要使用外键约束,应选择InnoDB。
  4. 性能:MyISAM在读取数据方面的性能表现较好,在大量读取的情况下效率更高。而InnoDB在处理事务和大量并发查询的情况下性能更好。选择存储引擎时需要根据应用程序的读写比例和并发性能的需求来选择。
  5. 其他特性:MyISAM支持全文搜索索引,而InnoDB不支持。MyISAM的表可以被压缩,而InnoDB的表不支持压缩。

   💧因此,在选择存储引擎时,需要根据应用程序的需求和特点进行选择。如果需要支持事务和外键约束,以及并发性能比较重要,应选择InnoDB。如果需要读取数据的性能比较重要,可以选择MyISAM。如果需要全文搜索索引或表压缩,应选择MyISAM

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
15天前
|
存储 SQL 关系型数据库
MySQL底层概述—2.InnoDB磁盘结构
InnoDB磁盘结构主要包括表空间(Tablespaces)、数据字典(Data Dictionary)、双写缓冲区(Double Write Buffer)、重做日志(redo log)和撤销日志(undo log)。其中,表空间分为系统、独立、通用、Undo及临时表空间,分别用于存储不同类型的数据。数据字典从MySQL 8.0起不再依赖.frm文件,转而使用InnoDB引擎存储,支持事务原子性DDL操作。
191 100
MySQL底层概述—2.InnoDB磁盘结构
|
12天前
|
SQL 关系型数据库 MySQL
MySQL底层概述—10.InnoDB锁机制
本文介绍了:锁概述、锁分类、全局锁实战、表级锁(偏读)实战、行级锁升级表级锁实战、间隙锁实战、临键锁实战、幻读演示和解决、行级锁(偏写)优化建议、乐观锁实战、行锁原理分析、死锁与解决方案
MySQL底层概述—10.InnoDB锁机制
|
8天前
|
SQL Oracle 关系型数据库
MySQL 和 Oracle 的区别?
本文对比了Oracle和MySQL数据库的多个方面。Oracle适用于大型数据库,支持高并发和大访问量,市场占有率为40%,安装占用空间较大,约3G;而MySQL适合中小型应用,是开源免费的,安装仅需152M。两者在主键生成、字符串处理、SQL语句、事务处理等方面存在差异。Oracle功能更为强大,尤其在企业级应用中表现突出,而MySQL则以简单易用见长。
MySQL 和 Oracle 的区别?
|
15天前
|
存储 缓存 关系型数据库
MySQL底层概述—5.InnoDB参数优化
本文介绍了MySQL数据库中与内存、日志和IO线程相关的参数优化,旨在提升数据库性能。主要内容包括: 1. 内存相关参数优化:缓冲池内存大小配置、配置多个Buffer Pool实例、Chunk大小配置、InnoDB缓存性能评估、Page管理相关参数、Change Buffer相关参数优化。 2. 日志相关参数优化:日志缓冲区配置、日志文件参数优化。 3. IO线程相关参数优化: 查询缓存参数、脏页刷盘参数、LRU链表参数、脏页刷盘相关参数。
MySQL底层概述—5.InnoDB参数优化
|
15天前
|
存储 SQL 关系型数据库
MySQL底层概述—4.InnoDB数据文件
本文介绍了InnoDB表空间文件结构及其组成部分,包括表空间、段、区、页和行。表空间是最高逻辑层,包含多个段;段由若干个区组成,每个区包含64个连续的页,页用于存储多条行记录。文章还详细解析了Page结构,分为通用部分(文件头与文件尾)、数据记录部分和页目录部分。此外,文中探讨了行记录格式,包括四种行格式(Redundant、Compact、Dynamic和Compressed),重点介绍了Compact行记录格式及其溢出机制。最后,文章解释了不同行格式的特点及应用场景,帮助理解InnoDB存储引擎的工作原理。
MySQL底层概述—4.InnoDB数据文件
|
15天前
|
存储 缓存 关系型数据库
MySQL底层概述—3.InnoDB线程模型
InnoDB存储引擎采用多线程模型,包含多个后台线程以处理不同任务。主要线程包括:IO Thread负责读写数据页和日志;Purge Thread回收已提交事务的undo日志;Page Cleaner Thread刷新脏页并清理redo日志;Master Thread调度其他线程,定时刷新脏页、回收undo日志、写入redo日志和合并写缓冲。各线程协同工作,确保数据一致性和高效性能。
MySQL底层概述—3.InnoDB线程模型
|
15天前
|
缓存 算法 关系型数据库
MySQL底层概述—1.InnoDB内存结构
本文介绍了InnoDB引擎的关键组件和机制,包括引擎架构、Buffer Pool、Page管理机制、Change Buffer、Log Buffer及Adaptive Hash Index。
180 97
MySQL底层概述—1.InnoDB内存结构
|
20天前
|
存储 SQL 缓存
MySQL原理简介—2.InnoDB架构原理和执行流程
本文介绍了MySQL中更新语句的执行流程及其背后的机制,主要包括: 1. **更新语句的执行流程**:从SQL解析到执行器调用InnoDB存储引擎接口。 2. **Buffer Pool缓冲池**:缓存磁盘数据,减少磁盘I/O。 3. **Undo日志**:记录更新前的数据,支持事务回滚。 4. **Redo日志**:确保事务持久性,防止宕机导致的数据丢失。 5. **Binlog日志**:记录逻辑操作,用于数据恢复和主从复制。 6. **事务提交机制**:包括redo日志和binlog日志的刷盘策略,确保数据一致性。 7. **后台IO线程**:将内存中的脏数据异步刷入磁盘。
|
2月前
|
存储 缓存 关系型数据库
【MySQL进阶篇】存储引擎(MySQL体系结构、InnoDB、MyISAM、Memory区别及特点、存储引擎的选择方案)
MySQL的存储引擎是其核心组件之一,负责数据的存储、索引和检索。不同的存储引擎具有不同的功能和特性,可以根据业务需求 选择合适的引擎。本文详细介绍了MySQL体系结构、InnoDB、MyISAM、Memory区别及特点、存储引擎的选择方案。
【MySQL进阶篇】存储引擎(MySQL体系结构、InnoDB、MyISAM、Memory区别及特点、存储引擎的选择方案)
|
2月前
|
存储 关系型数据库 MySQL
MySQL存储引擎详述:InnoDB为何胜出?
MySQL 是最流行的开源关系型数据库之一,其存储引擎设计是其高效灵活的关键。InnoDB 作为默认存储引擎,支持事务、行级锁和外键约束,适用于高并发读写和数据完整性要求高的场景;而 MyISAM 不支持事务,适合读密集且对事务要求不高的应用。根据不同需求选择合适的存储引擎至关重要,官方推荐大多数场景使用 InnoDB。
86 7