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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 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
相关文章
|
1月前
|
SQL 关系型数据库 MySQL
MySQL底层概述—10.InnoDB锁机制
本文介绍了:锁概述、锁分类、全局锁实战、表级锁(偏读)实战、行级锁升级表级锁实战、间隙锁实战、临键锁实战、幻读演示和解决、行级锁(偏写)优化建议、乐观锁实战、行锁原理分析、死锁与解决方案
102 24
MySQL底层概述—10.InnoDB锁机制
|
1月前
|
存储 缓存 关系型数据库
MySQL底层概述—5.InnoDB参数优化
本文介绍了MySQL数据库中与内存、日志和IO线程相关的参数优化,旨在提升数据库性能。主要内容包括: 1. 内存相关参数优化:缓冲池内存大小配置、配置多个Buffer Pool实例、Chunk大小配置、InnoDB缓存性能评估、Page管理相关参数、Change Buffer相关参数优化。 2. 日志相关参数优化:日志缓冲区配置、日志文件参数优化。 3. IO线程相关参数优化: 查询缓存参数、脏页刷盘参数、LRU链表参数、脏页刷盘相关参数。
MySQL底层概述—5.InnoDB参数优化
|
1月前
|
存储 SQL 关系型数据库
MySQL底层概述—4.InnoDB数据文件
本文介绍了InnoDB表空间文件结构及其组成部分,包括表空间、段、区、页和行。表空间是最高逻辑层,包含多个段;段由若干个区组成,每个区包含64个连续的页,页用于存储多条行记录。文章还详细解析了Page结构,分为通用部分(文件头与文件尾)、数据记录部分和页目录部分。此外,文中探讨了行记录格式,包括四种行格式(Redundant、Compact、Dynamic和Compressed),重点介绍了Compact行记录格式及其溢出机制。最后,文章解释了不同行格式的特点及应用场景,帮助理解InnoDB存储引擎的工作原理。
MySQL底层概述—4.InnoDB数据文件
|
3天前
|
SQL 关系型数据库 MySQL
MySQL生产环境迁移至YashanDB数据库深度体验
这篇文章是作者将 MySQL 生产环境迁移至 YashanDB 数据库的深度体验。介绍了 YashanDB 迁移平台 YMP 的产品相关信息、安装步骤、迁移中遇到的各种兼容问题及解决方案,最后总结了迁移体验,包括工具部署和操作特点,也指出功能有优化空间及暂不支持的部分,期待其不断优化。
|
15天前
|
监控 关系型数据库 MySQL
云数据库:从零到一,构建高可用MySQL集群
在互联网时代,数据成为企业核心资产,传统单机数据库难以满足高并发、高可用需求。云数据库通过弹性扩展、分布式架构等优势解决了这些问题,但也面临数据安全和性能优化挑战。本文介绍了如何从零开始构建高可用MySQL集群,涵盖选择云服务提供商、创建实例、配置高可用架构、数据备份恢复及性能优化等内容,并通过电商平台案例展示了具体应用。
|
22天前
|
SQL 关系型数据库 MySQL
数据库数据恢复——MySQL简介和数据恢复案例
MySQL数据库数据恢复环境&故障: 本地服务器,安装的windows server操作系统。 操作系统上部署MySQL单实例,引擎类型为innodb,表空间类型为独立表空间。该MySQL数据库没有备份,未开启binlog。 人为误操作,在用Delete命令删除数据时未添加where子句进行筛选导致全表数据被删除,删除后未对该表进行任何操作。
|
27天前
|
关系型数据库 MySQL 网络安全
如何排查和解决PHP连接数据库MYSQL失败写锁的问题
通过本文的介绍,您可以系统地了解如何排查和解决PHP连接MySQL数据库失败及写锁问题。通过检查配置、确保服务启动、调整防火墙设置和用户权限,以及识别和解决长时间运行的事务和死锁问题,可以有效地保障应用的稳定运行。
132 25
|
1月前
|
关系型数据库 MySQL 数据库
Docker Compose V2 安装常用数据库MySQL+Mongo
以上内容涵盖了使用 Docker Compose 安装和管理 MySQL 和 MongoDB 的详细步骤,希望对您有所帮助。
175 42
|
2月前
|
关系型数据库 MySQL 数据库连接
数据库连接工具连接mysql提示:“Host ‘172.23.0.1‘ is not allowed to connect to this MySQL server“
docker-compose部署mysql8服务后,连接时提示不允许连接问题解决
|
2月前
|
缓存 关系型数据库 MySQL
【深入了解MySQL】优化查询性能与数据库设计的深度总结
本文详细介绍了MySQL查询优化和数据库设计技巧,涵盖基础优化、高级技巧及性能监控。
510 0