Bohr-L Bohr-L
首页
技术
常见面试题
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

刘博

I'm a slow walker, But I never walk backwards.
首页
技术
常见面试题
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 数据处理与存储类

  • Spring 生态类

  • 缓存问题类

  • 多线程类

  • JVM 类

  • MySQL 类

    • MySQL 为什么一定要有一个主键
    • MySQL 中的 RR 隔离级别,到底有没有解决幻读问题
    • MySQL 的行级锁到底锁的是什么东西?
    • 存储 MD5 值应该用 VARCHAR 还是用 CHAR?
    • 数据库的三范式是什么?
    • 说说 InnoDB 与 MyISAM 的区别
    • drop、truncate、delete 的区别
    • 聊一聊数据库事务机制
    • 聊一聊 MySQL 中的关联查询
    • 事务隔离级别有哪些?MySQL 的默认隔离级别是什么
    • 分库分表之后,id 主键如何处理?
    • 说说在 MySQL 中一条查询 SQL 是如何执行的?
    • 讲解下 DDL、DML、DCL
    • 存储过程和触发器的作用
    • MySQL 如何行转列和列转行
    • 如何查看 SQL 的执行计划
    • union 和 unionAll 的区别
    • having 和 where 的区别
    • 常见的索引原则
    • MySQL 中的 IN 和 EXISTS 子句有什么区别?
    • MySQL 如何处理 NULL 值,对性能有什么影响?
    • 如何在 MySQL 中处理和避免全表扫描?
    • MySQL 中的表空间是什么,它的作用是什么?
      • 在 MySQL 中,如何优化 ORDER BY 查询?
    • Java 8 + 特性类

    • 其他技术类

    • 常见面试题
    • MySQL 类
    刘博
    2025-12-29
    目录

    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
    如何在 MySQL 中处理和避免全表扫描?
    在 MySQL 中,如何优化 ORDER BY 查询?

    ← 如何在 MySQL 中处理和避免全表扫描? 在 MySQL 中,如何优化 ORDER BY 查询?→

    最近更新
    01
    CPU 使用率较高排查和解决
    12-29
    02
    JVM OOM 问题如何排查和解决
    12-29
    03
    接口防刷怎么实现?
    12-29
    更多文章>
    Theme by Vdoing | Copyright © 2025-2026 Bohr-L's note
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式