快速删除大表

利用创建硬链接的方式删除表

查看表大小
mysql> select a.FILE_NAME,a.TOTAL_EXTENTS*a.EXTENT_SIZE/1024/1024/1024 from information_schema.FILES a where a.FILE_ID=291;
+-------------+----------------------------------------------+
| FILE_NAME   | a.TOTAL_EXTENTS*a.EXTENT_SIZE/1024/1024/1024 |
+-------------+----------------------------------------------+
| ./ht/tb.ibd |                              16.500000000000 |
+-------------+----------------------------------------------+
1 row in set (0.00 sec)

mysql> select count(1) from ht.tb;
+-----------+
| count(1)  |
+-----------+
| 268435456 |
+-----------+
1 row in set (3 min 11.39 sec)
添加列,验证是否重新创建表
mysql> alter table ht.tb add column city varchar(20) default 'beijing';
Query OK, 0 rows affected (17 min 8.64 sec)
Records: 0  Duplicates: 0  Warnings: 0
mysql> select a.FILE_NAME,a.TOTAL_EXTENTS*a.EXTENT_SIZE/1024/1024/1024 from information_schema.FILES a where a.FILE_ID=293;
+-------------+----------------------------------------------+
| FILE_NAME   | a.TOTAL_EXTENTS*a.EXTENT_SIZE/1024/1024/1024 |
+-------------+----------------------------------------------+
| ./ht/tb.ibd |                              13.742187500000 |
+-------------+----------------------------------------------+
1 row in set (0.00 sec)
表的大小和文件号都改变,确认alter  table 会创建表,在创建表的过程当中会锁表。
创建硬链接
[root@redis01 ht]# ln tb.ibd tb.h
[root@redis01 ht]# ll
total 28819828
-rw-r-----. 1 mysql mysql          61 Jun 13 09:33 db.opt
-rw-r-----. 1 mysql mysql        8586 Jun 28 11:16 person.frm
-rw-r-----. 1 mysql mysql       98304 Jun 28 11:18 person.ibd
-rw-r-----. 1 mysql mysql        8703 Jun 28 11:16 shirt.frm
-rw-r-----. 1 mysql mysql       98304 Jun 28 11:18 shirt.ibd
-rw-r-----. 1 mysql mysql        8616 Aug 22 12:06 tb.frm
-rw-r-----. 1 mysql mysql        8616 Aug 22 12:06 tb.frm_bak
-rw-r-----. 2 mysql mysql 14755561472 Aug 21 18:00 tb.h
-rw-r-----. 2 mysql mysql 14755561472 Aug 21 18:00 tb.ibd
-rw-r-----. 1 mysql mysql        8652 Aug 22 11:33 tb_new.frm
-rw-r-----. 1 root  root         8652 Aug 22 11:41 tb_new.frm_bak
-rw-r-----. 1 mysql mysql       98304 Aug 22 11:33 tb_new.ibd
删除表
mysql> drop table ht.tb;
Query OK, 0 rows affected (1.54 sec)
从时间上看很快就删除,在删除硬链接
[root@redis01 ht]# ll
total 28762380
-rw-r-----. 1 mysql mysql          61 Jun 13 09:33 db.opt
-rw-r-----. 1 mysql mysql        8586 Jun 28 11:16 person.frm
-rw-r-----. 1 mysql mysql       98304 Jun 28 11:18 person.ibd
-rw-r-----. 1 mysql mysql        8703 Jun 28 11:16 shirt.frm
-rw-r-----. 1 mysql mysql       98304 Jun 28 11:18 shirt.ibd
-rw-r-----. 1 mysql mysql        8616 Aug 22 12:06 tb.frm_bak
-rw-r-----. 1 mysql mysql 14755561472 Aug 22 15:46 tb.h
-rw-r-----. 1 mysql mysql        8652 Aug 22 11:33 tb_new.frm
-rw-r-----. 1 root  root         8652 Aug 22 11:41 tb_new.frm_bak
-rw-r-----. 1 mysql mysql 14696841216 Aug 22 15:33 tb_new.ibd
[root@redis01 ht]# rm -f tb.h

利用truncate删除大表
mysql> select a.FILE_ID,a.FILE_NAME,a.TOTAL_EXTENTS*a.EXTENT_SIZE/1024/1024/1024 from information_schema.FILES a where a.FILE_ID=295;
+---------+-----------------+----------------------------------------------+
| FILE_ID | FILE_NAME       | a.TOTAL_EXTENTS*a.EXTENT_SIZE/1024/1024/1024 |
+---------+-----------------+----------------------------------------------+
|     295 | ./ht/tb_new.ibd |                              13.687500000000 |
+---------+-----------------+----------------------------------------------+
1 row in set (0.00 sec)

mysql> truncate table ht.tb_new;
Query OK, 0 rows affected (8.53 sec)

mysql> drop table ht.tb_new;
Query OK, 0 rows affected (0.03 sec)

从上面可以得出结论,对于大表利用truncate也能很快删除。

  

posted @ 2018-08-22 16:40  刚好遇见Mysql  阅读(440)  评论(0)    收藏  举报