最近在考MySQL 8.0的OCP ,开个专题专门查漏补缺下 只是做备忘,有的概念只是一笔带过,具体可自行搜索 基于8.0.26 这期来介绍表空间,以下都为Innodb表空间,这节内容是File-Per-Table 表空间 ## 1. File-Per-Table 表空间 File-Per-Table 表空间用于存放innodb表的数据和索引,一个表对应一个数据文件 当innodb_file_per_table参数开启后,创建的表默认是在File-Per-Table 表空间中,关闭该参数会导致表建立在系统表空间 数据文件的名称为table_name.ibd,会存放在数据目录的schema目录里面,我们可以在create table中使用DATA DIRECTORY 字句来指定放的目录 ## 2. File-Per-Table 表空间的优势 - 在drop或truncate表后会回收空间,而系统表空间则不可以 - truncate table语句的性能会更好 - 可以建立在不同的存储上,可以有更高的IO能力 - 可以从另外的实例import表 - 支持DYNAMIC and COMPRESSED行格式,系统表空间不可以 - 可以通过查看数据文件的大小来得到表的大小 - 每个表的最大大小为64TB,而其他共享表空间(系统表空间和通用表空间)总共只能64TB ## 3. File-Per-Table 表空间的劣势 和共享表空间(系统表空间和通用表空间)相比,其有如下劣势 - 由于数据文件只能被一个表使用,可能会造成空间的浪费 - 可能会造成open files过多影响性能 - drop table时会三秒整个buffer pool,缓冲池很大时会慢,可能延迟其他操作 - innodb_autoextend_increment参数对应该表空间无效,所以每次的增长量为4MB ### 3.参考连接 [https://dev.mysql.com/doc/refman/8.0/en/innodb-file-per-table-tablespaces.html](https://dev.mysql.com/doc/refman/8.0/en/innodb-file-per-table-tablespaces.html)