MySQL 中的表空间是什么,它的作用是什么?
MySQL 的表空间(Table Space)是 “存储表数据和索引的物理空间”,不同存储引擎的表空间实现差异显著,核心作用是 “管理数据的存储、组织和访问”,具体如下:
# 1. 表空间的分类(按存储引擎)
# (1)InnoDB 的表空间
InnoDB 是 MySQL 默认存储引擎,表空间分为 “系统表空间” 和 “独立表空间”,可通过innodb_file_per_table参数控制(默认开启,即独立表空间)。
- 系统表空间(System Tablespace):
- 对应文件:
ibdata1(默认)、ibdata2等(可通过innodb_data_file_path配置多个文件); - 存储内容:InnoDB 的数据字典(表结构元信息)、undo 日志、临时表数据、未开启独立表空间的表数据和索引;
- 特点:所有表共享一个表空间,文件会持续增长(即使删除数据,空间也不会释放给操作系统),容易导致空间浪费。
- 对应文件:
- 独立表空间(File-Per-Table Tablespace):
- 对应文件:每张表对应两个文件(
.ibd数据文件和.frm表结构文件,MySQL 8.0 后.frm合并到.ibd); - 存储内容:单张表的数据和索引(聚簇索引、非聚簇索引);
- 特点:每张表的空间独立管理,删除表时会释放磁盘空间,便于管理和维护(如单独备份某张表)。
- 对应文件:每张表对应两个文件(
- 临时表空间(Temporary Tablespace):
- 对应文件:
ibtmp1; - 存储内容:临时表(如
CREATE TEMPORARY TABLE创建的表)的数据和索引; - 特点:MySQL 重启后自动清空,空间可回收。
- 对应文件:
- 通用表空间(General Tablespace):
- 手动创建的表空间(
CREATE TABLESPACE),可存储多张表的数据和索引; - 适用场景:需将多张表存储在同一磁盘(如分区磁盘),或统一管理表空间大小。
- 手动创建的表空间(
# (2)MyISAM 的表空间
MyISAM 不支持表空间概念,数据和索引分开存储,对应三个文件:
.frm:表结构文件;.MYD:数据文件(存储表数据);.MYI:索引文件(存储表索引);- 特点:无表空间管理机制,数据和索引独立,崩溃后无法恢复。
# 2. 表空间的核心作用
- 1. 存储数据和索引:表空间是数据和索引的物理载体,InnoDB 的聚簇索引、非聚簇索引,以及表数据均存储在表空间中;
- 2. 管理数据组织:InnoDB 的表空间按 “页(Page)” 组织数据(默认页大小 16KB),页是数据读写的最小单位,表空间通过页链表、区(Extent)、段(Segment)管理数据,提升访问效率;
- 3. 支持事务和崩溃恢复:InnoDB 的表空间包含 redo 日志、undo 日志的存储区域(系统表空间),事务提交时,redo 日志写入表空间,崩溃后可通过日志恢复数据;
- 4. 隔离表数据:独立表空间让每张表的数据和索引独立存储,避免一张表的操作影响其他表(如删除表时释放自身空间,不影响其他表);
- 5. 支持灵活的存储配置:可通过表空间配置,将不同表存储在不同磁盘(如热点表存储在 SSD,冷数据存储在 HDD),优化存储性能。
# 3. 表空间的常用操作
查看表空间类型:
-- 查看innodb_file_per_table参数(ON:独立表空间,OFF:系统表空间) SHOW VARIABLES LIKE 'innodb_file_per_table';1
2创建独立表空间的表:
-- 开启独立表空间(默认开启) SET GLOBAL innodb_file_per_table = ON; -- 创建表,自动生成独立表空间文件(user.ibd) CREATE TABLE user (id INT PRIMARY KEY, name VARCHAR(20));1
2
3
4创建通用表空间:
-- 创建通用表空间 CREATE TABLESPACE ts1 ADD DATAFILE 'ts1.ibd' ENGINE=InnoDB; -- 将表存储到通用表空间 CREATE TABLE user (id INT PRIMARY KEY, name VARCHAR(20)) TABLESPACE ts1;1
2
3
4查看表空间大小:
-- 查看表的大小(数据+索引) SELECT TABLE_NAME, DATA_LENGTH + INDEX_LENGTH AS TABLE_SIZE FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test_db' AND TABLE_NAME='user';1
2
上次更新: 12/30/2025