insert时能否重用delete后的空间

这个问题答案很简单,很多人也都清楚,但直接说答案没意义,也不便于理解。我们用简单的案例来演示


1、新建表,占用200M

mysql> create table test as select @id:=@id+1 as id,e.* from emp e ,t100 a,t100 b,t100 c;
Query OK, 2875306 rows affected (30.62 sec)
Records: 2875306  Duplicates: 0  Warnings: 0

mysql> system ls /data/mysql/user_3306/data/test/test.* -lh
-rw-rw----. 1 mysql mysql 8.6K 2月   5 07:50 /data/mysql/user_3306/data/test/test.frm
-rw-rw----. 1 mysql mysql 212M 2月   5 07:50 /data/mysql/user_3306/data/test/test.ibd

2、删除数据,空间不会释放

mysql> select count(*) from test;
+----------+
| count(*) |
+----------+
|  2875306 |
+----------+
1 row in set (6.87 sec)

mysql> delete from test limit 2875300;
Query OK, 2875300 rows affected, 1 warning (39.77 sec)

mysql> system ls /data/mysql/user_3306/data/test/test.* -lh
-rw-rw----. 1 mysql mysql 8.6K 2月   5 07:50 /data/mysql/user_3306/data/test/test.frm
-rw-rw----. 1 mysql mysql 212M 2月   5 07:53 /data/mysql/user_3306/data/test/test.ibd

3、insert数据,可以看到重用了空间

mysql> insert into test select @id:=@id+1 as id,e.* from emp e ,t100 a,t100 b,t100 c;
Query OK, 2875306 rows affected (51.26 sec)
Records: 2875306  Duplicates: 0  Warnings: 0

mysql> system ls /data/mysql/user_3306/data/test/test.* -lh
-rw-rw----. 1 mysql mysql 8.6K 2月   5 07:50 /data/mysql/user_3306/data/test/test.frm
-rw-rw----. 1 mysql mysql 224M 2月   5 07:54 /data/mysql/user_3306/data/test/test.ibd

以上实验,非自动提交模式下注意要用commit来提交结果
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章