• 快速删除大表


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

    查看表大小
    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也能很快删除。
    

      

  • 相关阅读:
    SQL性能优化:如何定位网络性能问题
    ORACLE 10升级到10.2.0.5 Patch Set遇到的内核参数检测失败问题
    Linux 僵尸进程查杀
    Linux 虚拟机网络适配器从E1000改为VMXNET3
    v$session中server为none与shared值解析
    SQL SERVER导出特殊格式的平面文件
    XtraBackup出现 Can't connect to local MySQL server through socket '/tmp/mysql.sock'
    CentOS 6.6安装Xtrabackup RPM提示缺少libev.so.4()
    SQL Server Replication 中关于视图的点滴
    ORA-00988: missing or invalid password(s)
  • 原文地址:https://www.cnblogs.com/omsql/p/9518635.html
Copyright © 2020-2023  润新知