同样的数据,一份放独立表空间一份放共享表空间,对比DROP TABLE之后磁盘空间到底还不还得回来。
代码SELECT @@innodb_file_per_table; -- 本机真实是1(默认开启) CREATE TABLE uncomp_test (...) ; -- 默认走独立表空间 CREATE TABLE shared_test (...) TABLESPACE=innodb_system; -- 显式指定共享表空间
DROP之前: /opt/homebrew/var/mysql/mysqllab/uncomp_test.ibd 存在,393216字节 DROP TABLE uncomp_test; DROP之后: 该文件真实不存在了
独立表空间(innodb_file_per_table=ON,每张表一个独立的.ibd文件)的设计,让"删表回收磁盘空间"这件事变得真实简单直接——DROP TABLE真实就是删掉这个文件,操作系统立刻能看到这块磁盘空间被真实释放。
$ ls mysqllab/shared_test.ibd (真实不存在——这张表的数据存在共享的ibdata1里,没有独立文件) 创建shared_test、插入数据前: ibdata1 = 79691776 字节 插入约500KB数据之后: ibdata1 = 79691776 字节 (真实没变) DROP TABLE shared_test 之后: ibdata1 = 79691776 字节 (真实还是没变)
每一步都是本文上面用真实磁盘文件跑出来的原始结果。
innodb_file_per_table真实是默认开启的