mysql 引擎概述

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: MySQL存储引擎是处理不同类型表操作的组件,InnoDB是最常用的默认引擎,支持事务、行级锁定和外键。MySQL采用插件式存储引擎架构,支持多种引擎,如MyISAM、Memory、CSV等,每种引擎适用于不同的应用场景。通过`SHOW ENGINES`命令可查看当前MySQL实例支持的存储引擎及其状态。选择合适的存储引擎需根据具体业务需求和引擎特性来决定。

1. 什么是Mysql 引擎

存储引擎是Mysql的组件,用于处理Mysql不同类型的表操作。Innodb是默认的,最普遍的存储引擎,oracel建议建表时候建议使用除非有特殊需求(create table语法在Mysql5.7中默认创建的是一个Innodb引擎的表)

Mysql服务使用可拔插的存储引擎架构,可以灵活在一个运行的Mysql中进行加载和卸载存储引擎。

为了确定你的存储引擎能够支持的存储引擎,你能够使用 show engines语句进行查询。支持列中的值标识是否可以使用某个引擎,值为yes,no,default 表示这个引擎可用,不可用,默认可用。

2. show egines结果示例

ENGINE SUPPORT COMMENT TRANSACTIONS XA SAVEPOINTS
Innodb DEFAULT Supports transactions, row-level locking, and foreign keys YES YES YES
Mrg_Myisam YES Collection of identical Myisam tables NO NO NO
Memory YES Hash based, stored in Memory, useful for temporary tables NO NO NO
BLlackhole YES /dev/null storage engine (anything you write to it disappears) NO NO NO
Myisam YES Myisam storage engine NO NO NO
Csv YES Csv storage engine NO NO NO
Archive YES Archive storage engine NO NO NO
Performance_Schema YES Performance Schema NO NO NO
Federated NO Federated Mysql storage engine

3. Mysql5.7支持的存储引擎

  • InnoDB:: 是Mysql5.7默认的执行引擎,是一个事务安全(符合acid标准)存储引擎,有提交,回滚,容灾恢复的能力来保护用户数据。Innodb行锁(无需升级到更粗粒度锁)和oracle风格一只无锁定读取可以提高多用户性能。Innodb将用户数据存储在聚类索引中,以减少基于主键的普通查询的I/O。 为了维护数据完整性,Innodb 还支持 FOREIGN KEY 参考完整性约束。
  • MyISAM::这些表占用空间小。 表级锁定限制了读/写工作负载的性能,因此通常用于 Web 和数据仓库配置中的只读或最多读取的工作负载。
  • Memory:将所有数据存储在内存中,以便在需要快速查找非关键数据的环境中快速访问。 该引擎以前被称为 HEAP 引擎。 它的用例在不断减少;Innodb 及其缓冲池内存区域提供了一种通用而持久的方式,可将大部分或所有数据保存在内存中,而 NdbCLUSTER 则可为庞大的分布式数据集提供快速的键值查找。
  • CSV:它的表格实际上是用逗号分隔值的文本文件。 Csv 表允许你以 Csv 格式导入或转储数据,以便与读写相同格式的脚本和应用程序交换数据。 由于 Csv 表没有索引,因此在正常运行时,数据通常保存在 Innodb 表中,只有在导入或导出阶段才使用 Csv 表。
  • Archive:这些结构紧凑的非索引表用于存储和检索大量很少被引用的历史、存档或安全审计信息。
  • Blackhole:Blackhole 存储引擎接受但不存储数据,类似于 Unix /dev/null 设备。 查询总是返回空集。 这些表可用于复制配置,在这种配置中,DML 语句被发送到复制服务器,但源服务器并不保留自己的数据副本。
  • NDB:(又称 NdbCLUSTER): 这种集群数据库引擎特别适用于对正常运行时间和可用性要求最高的应用程序。
  • Merge: 使 Mysql DBA 或开发人员能够对一系列相同的 Myisam 表进行逻辑分组,并将它们作为一个对象引用。 适用于数据仓库等 VLDB 环境。
  • Federated: 提供连接独立 Mysql 服务器的功能,可从多个物理服务器创建一个逻辑数据库。 非常适合分布式或数据集市环境。
  • Example:该引擎是 Mysql 源代码中的一个示例,说明了如何开始编写新的存储引擎。 开发人员主要对它感兴趣。 存储引擎是一个什么都不做的 "存根"。 您可以使用该引擎创建表格,但不能在其中存储数据,也不能从中检索数据。

在整个服务器或模式中使用相同的存储引擎并不受限制。 您可以为任何表指定存储引擎。 例如,应用程序可能主要使用 Innodb 表,还有一个 Csv 表用于将数据导出到电子表格,以及一些 Memory 表用于临时工作区。

4.引擎适用场景

Mysql 提供的各种存储引擎在设计时考虑了不同的使用情况。 下表概述了 Mysql 提供的一些存储引擎,表后附有说明。

Feature Myisam Memory Innodb Archive Ndb
B-tree indexes Yes Yes Yes No No
Backup/point-in-time recovery (note 1) Yes Yes Yes Yes Yes
Cluster database support No No No No Yes
Clustered indexes No No Yes No No
Compressed data Yes (note 2) No Yes Yes No
Data caches No N/A Yes No Yes
Encrypted data Yes (note 3) Yes (note 3) Yes (note 4) Yes (note 3) Yes (note 5)
Foreign key support No No Yes No Yes
Full-text search indexes Yes No Yes (note 6) No No
Geospatial data type support Yes No Yes Yes Yes
Geospatial indexing support Yes No Yes (note 7) No No
Hash indexes No Yes No (note 8) No Yes
Index caches Yes N/A Yes No Yes
Locking granularity Table Table Row Row Row
MVCC No No Yes No No
Replication support (note 1) Yes Limited (note 9) Yes Yes Yes
Storage limits 256TB RAM 64TB None 384EB
T-tree indexes No No No No Yes
Transactions No No Yes No Yes
Update statistics for data dictionary Yes Yes Yes Yes Yes
  1. 某些功能是在 Mysql 服务器级别实现的,而不是在具体的存储引擎(如 Innodb 或 Myisam)中处理的。即这些功能和数据库的底层存储引擎无关,直接在数据库服务器中实现。
  2. 使用 Myisam 存储引擎时,支持压缩表格,但仅在行格式为压缩行时支持。需要注意的是,压缩格式下的 Myisam 表是只读的,无法进行写操作。
  3. 加密功能是通过服务器提供的加密函数实现的,而不是存储引擎本身提供的。这意味着不依赖具体存储引擎,Mysql 服务器本身提供加密相关的功能。
  4. 加密功能通过服务器的加密函数来实现。从 Mysql 5.7 版本开始,Mysql 支持静态数据加密(Data-at-Rest Encryption),即数据库文件中的静态数据可以被加密。
  5. Ndb 存储引擎(Mysql Cluster 使用的存储引擎),从 Ndb 8.0.22 开始支持加密备份。从 Ndb 8.0.29 开始,支持透明的 Ndb 文件系统加密
  6. 全文索引(FULLTEXT Indexes) 是在 Mysql 5.6 及更高版本中支持的。它用于对大文本字段进行全文检索,可以快速进行复杂的文本查询(如模糊查询)。
  7. 地理空间索引(Geospatial Indexing) 是在 Mysql 5.7 及以后版本中支持的。这种索引用于处理和查询地理空间数据(如地理坐标),常用于 GIS 应用。
  8. Innodb 存储引擎内部使用了哈希索引(Hash Index),作为其自适应哈希索引(Adaptive Hash Index)功能的一部分。自适应哈希索引是 Innodb 的一种性能优化机制,能自动创建哈希索引以加速某些类型的查询。

5.总结

  • Mysql支持各种各样的引擎供我们建表选择 5.7版本默认使用的是Innodb引擎
  • Innodb引擎由于良好的容错恢复支持,事务,行锁,索引支持成为最普遍的引擎
  • show egines查看当前版本支持的引擎
  • 不同业务场景可能有适合自己的引擎 需要根据每个引擎的特性灵活选择


转载来源:https://juejin.cn/post/7418717006973304871

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
SQL 关系型数据库 MySQL
mysql主从复制概述和配置
【10月更文挑战第22天】MySQL 主从复制是一种将主服务器的数据复制到一个或多个从服务器的技术,实现读写分离,提高系统性能和可用性。主服务器记录变更日志,从服务器通过 I/O 和 SQL 线程读取并应用这些变更。适用于读写分离、数据备份和恢复、数据分析等场景。配置步骤包括修改配置文件、创建复制用户、配置从服务器连接主服务器并启动复制进程。
|
6月前
|
存储 关系型数据库 MySQL
MySQL数据库进阶第六篇(InnoDB引擎架构,事务原理,MVCC)
MySQL数据库进阶第六篇(InnoDB引擎架构,事务原理,MVCC)
|
2月前
|
存储 关系型数据库 MySQL
mysql 8.0 的 建表 和八种 建表引擎实例
mysql 8.0 的 建表 和八种 建表引擎实例
24 0
|
4月前
|
SQL 数据采集 关系型数据库
七:《智慧的网络爬虫》— MySQL概述
【8月更文挑战第11天】本篇文章详细的介绍了MySQL数据库的安装与使用;并讲述了MySQL的基本操作及其应用语法
53 0
七:《智慧的网络爬虫》— MySQL概述
|
5月前
|
存储 SQL 关系型数据库
(十三)MySQL引擎篇:半道出家的InnoDB为何能替换官方的MyISAM?
MySQL是一款支持拔插式引擎的数据库,在开发过程中你可以根据业务特性,从支持的诸多引擎中选择一款适合的,例如MyISAM、InnoDB、Merge、Memory(HEAP)、BDB(BerkeleyDB)、Example、Federated、Archive、CSV、Blackhole.....
|
4月前
|
cobar 关系型数据库 MySQL
使用MyCat实现MySQL主从读写分离(一)概述
【8月更文挑战第11天】MySQL读写分离通过主从复制分散负载,主库负责写操作,从库承担读查询,以复制技术确保数据一致性。此策略有效缓解锁竞争,提升查询效能并增强系统可用性。实现方式包括应用层处理,简便快捷但灵活性受限;或采用中间件如MyCAT、Vitess等,支持复杂场景但需专业团队维护。
123 0
|
6月前
|
存储 关系型数据库 MySQL
MySQL数据库——InnoDB引擎-逻辑存储结构(表空间、段、区、页、行)
MySQL数据库——InnoDB引擎-逻辑存储结构(表空间、段、区、页、行)
120 7
|
6月前
|
SQL 关系型数据库 MySQL
MySQL数据库——基础篇总结(概述、SQL、函数、约束、多表查询、事务)一
MySQL数据库——基础篇总结(概述、SQL、函数、约束、多表查询、事务)一
47 5
|
6月前
|
缓存 关系型数据库 MySQL
MySQL数据库——InnoDB引擎-架构-内存结构(Buffer Pool、Change Buffer、Adaptive Hash Index、Log Buffer)
MySQL数据库——InnoDB引擎-架构-内存结构(Buffer Pool、Change Buffer、Adaptive Hash Index、Log Buffer)
100 3
|
5月前
|
SQL Oracle 关系型数据库
第1章 MySQL概述
第1章 MySQL概述
24 0