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來提交結果
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章