MySQL教程30-不同存储引擎的数据表在文件系统里是如何表示的?
MySQL 支持 InnoDB、MyISAM、Memory、Merge、Archive、CSV、BLACKHOLE 几种存储引擎,不同存储引擎的数据表在文件系统中的表示也各不相同。
MySQL 中的每一个数据表在磁盘上至少被表示为一个文件,即存放着该数据表结构定义的 .frm 文件。不同的存储引擎还有其它用来存放数据和索引信息的文件。
1 | 从 MySQL 8.0 版本开始,frm 表结构定义文件被取消,MySQL 把表结构信息都写到了系统表空间。 |
下面介绍不同存储引擎的数据表在文件系统中是如何表示的。
MyISAM
MyISAM 存储引擎的数据表在数据库目录里使用 3 个文件来代表,这些文件的基本名与数据表的名字相同,扩展名则表明了文件的具体用途。这三个文件的扩展名分别是:
.frm
:表结构定义文件,存放着该数据表的结构定义。.MYD
:MY Data 的缩写,数据文件,存放着该数据表中各个行的数据。.MYI
: MY Index 的缩写,索引文件,存放着该数据表的全部索引信息。
下面创建存储引擎为 MyISAM 的 tb_myisam 表,SQL 语句如下。
mysql> SET default_storage_engine=MyISAM; Query OK, 0 rows affected (0.02 sec) mysql> CREATE TABLE tb_myisam( -> id INT -> ); Query OK, 0 rows affected (0.03 sec)
1 | 本节中所有创建的不同存储引擎的表在文件系统(数据目录)中的表示在文章末尾展示。 |
MERGE
MERGE 存储引擎的数据表其实是一个逻辑结构。它代表着由一组结构完全相同的 MyISAM 数据表所构成的集合。有关的查询命令会把它当作一个大数据表来对待。
MERGE 存储引擎的数据表除了拥有存储表结构定义的 .frm 文件以外,还有一个扩展名为 .mgr 的文件,这个文件里不保存数据,而是数据的来源地。通俗的说,就是一份由多个 MyISAM 数据表的名单构成的 MERGE 数据表。
下面创建存储引擎为 MERGE 的 tb_merge 表,SQL 语句如下。
mysql> SET default_storage_engine=Merge; Query OK, 0 rows affected (0.00 sec) mysql> CREATE TABLE tb_merge( -> id INT -> ); Query OK, 0 rows affected (0.02 sec)
InnoDB
对于 InnoDB 存储引擎的数据表,一个表对应两个文件,一个是 *.frm,存储表结构信息;一个是 *.ibd,存储表中数据。
下面创建存储引擎为 InnoDB 的 tb_innodb 表,SQL 语句如下。
mysql> SET default_storage_engine=InnoDB; Query OK, 0 rows affected (0.00 sec) mysql> CREATE TABLE tb_innodb( -> id INT -> ); Query OK, 0 rows affected (0.10 sec)
Memory
Memory 存储引擎的数据表是创建在内存中的数据表。因为 MySQL 服务器把 Memory 数据表的数据和索引都存放在了内存中而不是硬盘上,所以除了相应的 .frm 文件外,Memory 引擎表在文件系统里没有其它相应的代表文件。
下面创建存储引擎为 Memory 的 tb_memory 表,SQL 语句如下。
mysql> SET default_storage_engine=Memory; Query OK, 0 rows affected (0.00 sec) mysql> CREATE TABLE tb_memory( -> id INT -> ); Query OK, 0 rows affected (0.03 sec)
Archive
Archive 存储引擎的数据表除了拥有 .frm 表结构定义文件外,还有一个扩展名为 .arz 的数据文件,用来存储历史归档数据。执行优化操作时可能还会出现一个扩展名为 .arn 的文件。
下面创建存储引擎为 Archive 的 tb_archive 表,SQL 语句如下。
mysql> SET default_storage_engine=Archive; Query OK, 0 rows affected (0.00 sec) mysql> CREATE TABLE tb_archive( -> id INT -> ); Query OK, 0 rows affected (0.04 sec)
CSV
与其它类型的存储引擎相同,CSV 引擎表也会包含一个 .frm 表结构定义文件,此外还会创建一个扩展名为 .CSV 的数据文件。这个文件是 CSV 格式的文本文件,用来保存表中的实际数据。
.CSV 文件可以直接在 Excel 中打开,或者是使用其它文件编辑工具查看。另外,还有一个同名的元信息文件,文件扩展名为 .CSM,用来保存表的状态及表中保存的数据量。
1 | 由于 CSV 文件可被直接编辑,如果操作得当,可以不通过 SQL 语句直接修改 CSV 文件中的内容。 |
CSV 存储引擎基于 CSV 格式文件存储数据,由于自身文件格式的原因,所有列必须强制指定 NOT NULL。
下面创建存储引擎为 CSV 的 tb_csv 表,SQL 语句如下。
mysql> SET default_storage_engine=csv; Query OK, 0 rows affected (0.02 sec) mysql> CREATE TABLE tb_csv( -> id INT NOT NULL, -> name CHAR(10) NOT NULL -> ); Query OK, 0 rows affected (0.04 sec)
BLACKHOLE
由于在 BLACKHOLE 存储引擎的数据表中写入任何数据都会消失,所以除了 .frm 文件,BLACKHOLE 引擎表没有其他相应的代表文件。
下面创建存储引擎为 BLACKHOLE 的 tb_blackhole 表,SQL 语句如下。
mysql> SET default_storage_engine=BLACKHOLE; Query OK, 0 rows affected (0.00 sec) mysql> CREATE TABLE tb_blackhole( -> id INT -> ); Query OK, 0 rows affected (0.03 sec)
下图是不同存储引擎的数据表在文件系统中的表示。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)