delete操作的几种情况
- drop操作: 不管什么引擎,Innodb还是myisam都会释放磁盘空间
- truncate操作: truncate和drop一样都会释放磁盘空间,但与drop不同的是,truncate=drop+create,就是会新建一张空表,保留了mysql的表结构
- delete操作:
- delete from table_name删除了全部数据,对于myisam会释放磁盘空间,innodb不会释放
- delete from 带where的删除都不会释放磁盘空间,可以使用optimize table name进行释放
分析
1.删除后并不会把数据从表中删除,而是以碎片形式继续存在表空间,可以使用命令来查看
show table status like 'table_name';
2.data_free表示碎片的大小
3. 使用optimize优化
optimize table table_name;
- 优化后的对比
存储引擎区别
- innodb:
- 支持事务,外键,行级锁,
- 属于索引组织表,可以使用共享表空间存储或多表空间存储
- 共享表空间存储与myisam一样,以表名开头,拓展名是frm;索引文件和数据文件都保存在一个表空间里
- 使用多表空间存储,每个表都有一个表空间文件用于存储每个表的数据和索引
- myisam:
- 不支持外键,事务,属于堆表
- 在磁盘存储上有三个文件: frm用于存储表的定义;myd用于存放数据;myi用于存放表索引