作为一名资深的CV 战士,我们可能很少去关注 MySQL的数据文件存储在哪里。当我们执行一批删除操作的时候,也不会去观察数据库文件的大小到底有没有变化。下面我们一起来看一下 MySQL 数据存储相关的原理。
在MySQL 8.0 之前,表结构定义是存储在 .frm 为后缀的文件里,如下图所示。因为表结构定义占用空间比较小,下面主要介绍一下 表数据的存储相关的东西。

innodb_file_per_table
表数据可以存储在共享表空间里(ibdata1、ibdata2…),也可以单独存储,这个是有innodb_file_per_table 参数决定的。innodb_file_per_table 设置为 OFF 时,表示表的数据存储在 共享表空间,也就是和数据字典存放在一起;当设置为ON 时,每个 InnoDB 的表数据都会存储在一个 .ibd 的文件中。(从 MySQL 5.6.6 开始默认为 ON)
innodb_file_per_table 建议设置为 ON,也就是每个表数据单独存储。当我们使用 drop 删除表时,就可以回收磁盘空间了。否则磁盘空间还不一定会被回收。
数据删除流程

上面是主键索引树的结构ÿ

探讨MySQL InnoDB引擎下,innodb_file_per_table参数如何影响表数据存储,详解数据删除流程与表重建机制,包括Online与inplace操作的区别。
最低0.47元/天 解锁文章
311

被折叠的 条评论
为什么被折叠?



