MySQL存储引擎

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: MySQL 存储引擎 InnoDB MyISAM Memory CSV ARCHIVE BLCKHOLE MERGE FEDERATED EXAMPLE

存储引擎列表

  1. InnoDB
  2. MyISAM
  3. Memory
  4. CSV
  5. ARCHIVE
  6. BLCKHOLE
  7. MERGE
  8. FEDERATED
  9. EXAMPLE

InnoDB

InnoDB是一个事务型引擎,也是最重要使用最广泛的存储引擎。InnoDB的设计目标是处理大量短事务,短事务大部分情况是正常提交的,很少会回滚。一般的业务处理中,应该首选InnoDB存储引擎。

InnoDB的数据存储在表空间,表空间是由一些列数据文件组成。InnoDB可以将每个表的数据和索引文件存放在单独的文件中。

InnoDB使用MVVC来支持高并发。

InnoDB支持四个事务隔离级别(四个事务隔离级别参考:事务与事务隔离级别-MySQL),通过间隙锁(next-key locking)解决幻读。间隙锁是锁住范围,间隙锁参考:MySQL官方:Next-Key Locks

InnoDB表是基于聚簇索引建立的。

InnoDB可以在内存中创建哈希索引加速读操作,这种索引也称为:自适应哈希索引(adaptive hash index),InnoDB是不支持基于文件的哈希索引的,这个要额外注意。

InnnDB支持热备份,比如使用开源的XtraBackup可以做热备份,其他存储引擎不支持热备份。

更多InnoDB特性(官方):
1.png

MyISAM

MyISAM存储引擎也提供了大量的功能特性:全文索引、压缩、空间函数。MyISAM不支持事务和行级锁,所以崩溃后无法安全恢复。

存储

MyISAM将表存储在两个文件中:数据文件和索引文件。MyISAM可以存储的记录大小一般受限于操作系统单个文件大小和物理硬盘大小。

功能特性

锁:MyISAM是表锁,查询时对整张表加共享读锁,修改时对表加排他写锁。并发插入是业务的一个常态,MyISAM存储引擎有一个系统变量CONCURRENT INSERT用来控制并发插入行为:

  • 不允许并发插入
  • 表中间没有被删除的行,MyISAM允许在一个进程读表的同事,另一个进程从表尾插入记录
  • 无论表中间有没有被删除的行,都允许在表尾并发插入记录

更多特性:
2.png

Memory

Memory引擎是将表结构数据存储在硬盘中,数据存放在内存中的存储引擎。因为所有的数据都存在内存中, 所以读取和写入速度非常快,因为没有磁盘I/O。但是Memory表中的数据在遇到系统崩溃、硬件错误或断电问题后数据全部丢失。

尽管如此,Memory存储引擎依然可以适用于以下场景中:

  1. 键值映射查询,比如:一些常量字典表
  2. 缓存数据
  3. 保存中间结果

Memory存储引擎支持哈希索引,所以查询速度快。

更多Memory存储引擎特性参考:
3.png

CSV

CSV存储引擎将数据记录到文本文件中,并且值要以逗号分割。

CSV可以在运行时将文件拷入和拷出件到数据目录中,拷入文件后可以立即在查询到数据。

功能特性

CSV存储引擎不支持索引、不支持分区、表不能存在空列,必须都是非空。

Archive

Archive存储引擎在数据写入时将数据压缩,数据压缩采用zlib无损压缩;在读取数据时将数据解压。

功能特性

压缩与解压

写入时将行数据压缩,读取时将行数据解压。

读写与排序

Archive存储引擎支持INSERT、REPLACE、SELECT,不支持DELETE、UPDATE、ORDER BY、BLOB数据类型和空间数据类型。

自增

Archive存储引擎支持自增列属性。

索引

Archive存储引擎不支持索引。

更多特性

4.png

BlockHole

BlockHole(黑洞)存储引擎会丢弃所有写入的数据,所以尝试从BlockHole表中读取数据只能得到空结果。BlockHole存储引擎定位于MySQL Server间复制数据的过滤。假设你的应用需要一部分binlog日志数据,但是MySQL Server默认是将所有binlog数据传输给复制客户端,所有的binlog有可能太大了,所以可以使用BlockHole存储引擎对binlog进行过滤。

高性能MySQL作者说他在使用BlockHole存储引擎来完成特殊复制架构时碰到很多问题,并不推荐。

Merge

Merge引擎是MyISAM引擎的一个变种,专门用来将MyISAM的表合并成一张虚拟表,这样使用MyISAM表就像使用一张表一样方便。

Fedrated

Fedrated存储引擎是用来访问远程MySQL数据库的,当你查询Fedrated存储引擎表时,Fedrated存储引擎会自动从远程读取数据,但是数据不会存储到本地表。

Example

Example是用来向MySQL数据库引擎开发人员展示如何编写一个新的存储引擎。

总结

  1. InnoDB只支持自适应哈希索引,这个索引是为了加速读InnoDB自动在内存建立的,但是InnoDB不支持基于文件的哈希索引
  2. (MySQL8.0)InnoDB表空间最大为64TB
  3. MyISAM存储引擎不支持事务,所以不建议InnoDB表和MyISAM表混合使用事务,因为回滚会造成问题,正常提交不会有问题
  4. MyISAM主要缺点是不支持事务和表锁
  5. 不担心丢数据就用Memory,因为内存操作,快
  6. 想用MySQL处理CSV文件就用CSV存储引擎
  7. 想要归档数据就用Achive,因为数据压缩,省磁盘空间
  8. 想要基于不存储数据在本地只查询远程就用Federated

参考

  1. MySQL可选存储引擎 https://dev.mysql.com/doc/refman/8.0/en/storage-engines.html
  2. InnoDB存储引擎 https://dev.mysql.com/doc/refman/8.0/en/innodb-storage-engine.html
  3. Memory存储引擎 https://dev.mysql.com/doc/refman/8.0/en/memory-storage-engine.html
  4. CSV存储引擎 https://dev.mysql.com/doc/refman/8.0/en/csv-storage-engine.html
  5. 空间数据类型 https://dev.mysql.com/doc/refman/8.0/en/spatial-type-overview.html
  6. Merge存储引擎 https://dev.mysql.com/doc/refman/8.0/en/merge-storage-engine.html
  7. Fedrated存储引擎 https://dev.mysql.com/doc/refman/8.0/en/federated-storage-engine.html
  8. Example存储引擎 https://dev.mysql.com/doc/refman/8.0/en/example-storage-engine.html
  9. 高性能MySQL(第三版)
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
23天前
|
存储 SQL 关系型数据库
MySQL存储引擎
本文介绍了数据库优化的多个方面,包括选择合适的存储引擎、字段定义原则、避免使用外键和触发器、大文件存储策略、表拆分及字段冗余处理等。强调了从业务层面进行优化的重要性,如通过活动设计减少外部接口调用,以及在高并发场景下的流量控制与预处理措施。文章还提供了具体的SQL优化技巧和表结构优化建议,旨在提高数据库性能和可维护性。
MySQL存储引擎
|
8天前
|
存储 缓存 关系型数据库
【赵渝强老师】MySQL的MyISAM存储引擎
在MySQL5.1版本之前,默认存储引擎为MyISAM。MyISAM管理非事务表,提供高速存储和检索,支持全文搜索。其特点包括不支持事务、表级锁定、读写互阻、仅缓存索引等。适用于读多、写少且对一致性要求不高的场景。示例代码展示了MyISAM存储引擎的基本操作。
|
8天前
|
存储 Oracle 关系型数据库
【赵渝强老师】MySQL的InnoDB存储引擎
InnoDB是MySQL的默认存储引擎,广泛应用于互联网公司。它支持事务、行级锁、外键和高效处理大量数据。InnoDB的主要特性包括解决不可重复读和幻读问题、高并发度、B+树索引等。其存储结构分为逻辑和物理两部分,内存结构类似Oracle的SGA和PGA,线程结构包括主线程、I/O线程和其他辅助线程。
【赵渝强老师】MySQL的InnoDB存储引擎
|
8天前
|
存储 关系型数据库 MySQL
【赵渝强老师】MySQL的Memory存储引擎
MySQL 的存储引擎层负责数据的存储和提取,支持多种存储引擎,如 InnoDB、MyISAM 和 Memory。InnoDB 是最常用的存储引擎,从 MySQL 5.5.5 版本起成为默认引擎。Memory 存储引擎的数据仅存在于内存中,重启后数据会丢失。示例中创建了使用 Memory 引擎的 test3 表,并展示了数据在重启后消失的过程。
|
1月前
|
存储 SQL 缓存
MySQL存储引擎如何完成一条更新语句的执行!
MySQL存储引擎如何完成一条更新语句的执行!
MySQL存储引擎如何完成一条更新语句的执行!
|
2月前
|
存储 缓存 关系型数据库
MySQL高级篇——存储引擎和索引
MyISAM:不支持外键和事务,表锁不适合高并发,只缓存索引,内存要求低,查询快MyISAM提供了大量的特性,包括全文索引、压缩、空间函数(GIS)等,但MyISAM不支持事务、行级锁、外键,有一个毫无疑问的缺陷就是崩溃后无法安全恢复。5.5之前默认的存储引擎优势是访问的速度快,对事务完整性没有要求或者以SELECT、INSERT为主的应用针对数据统计有额外的常数存储。故而 count(*) 的查询效率很高表名.frm 存储表结构;表名.MYD 存储数据 (MYData);
MySQL高级篇——存储引擎和索引
|
3月前
|
存储 关系型数据库 MySQL
MySQL 中的事务存储引擎深入解析
【8月更文挑战第31天】
54 0
|
5月前
|
存储 关系型数据库 MySQL
|
4月前
|
存储 关系型数据库 MySQL
MySQL InnoDB存储引擎的优点有哪些?
上述提到的特性和优势使得InnoDB引擎非常适合那些要求高可靠性、高性能和事务支持的场景。在使用MySQL进行数据管理时,InnoDB通常是优先考虑的存储引擎选项。
173 0
|
5月前
|
存储 关系型数据库 MySQL
MySQL数据库进阶第一篇(存储引擎与Linux系统上安装MySQL数据库)
MySQL数据库进阶第一篇(存储引擎与Linux系统上安装MySQL数据库)