• MySQL 硬链接删除大表


    在清理整个大表时,我们推荐使用drop,而非delete。但是如果表实在太大,即使是drop,也需要消耗一定的时间。这时可以利用linux的硬连接来快速删除大表,操作过程如下:
    有一个大表test,共有4194304行数据,表空间文件大小为1.3G
    mysql> select count(*) from test;
    +----------+
    | count(*) |
    +----------+
    |  4194304 |
    +----------+
    1 row in set (15.20 sec)
    mysql> show create table testG
    *************************** 1. row ***************************
           Table: test
    Create Table: CREATE TABLE `test` (
      `id` int(11) DEFAULT NULL,
      `name` varchar(255) DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
    1 row in set (0.12 sec)
    [root@master sam]# du -sh test.ibd
    1.3G    test.ibd
    12345678910111213141516171819
    1.首先创建硬链接
    ln test.idb test.idb.hl
    ln test.frm test.frm.hl
    12
    2.删除test表
    drop table test;
    1
    3.会发现,drop操作速度很快,原来的test.idb和test.frm不见了,但是硬链接文件还在,所以真正的释放磁盘空间,需要删除test.idb.hl和test.frm.hl。
    快速删除原理:
    首先硬链接创建的文件test.idb.hl,和源文件test.idb是指向同一个inode。而MySQL的drop操作,实际上是删除test表对应的.idb和.frm文件,也就是test.idb和test.frm。而linux在有硬连接的情况下,删除其中源文件会非常快,因为只是删除了inode的指针,实际的数据还存储在inode里。所以磁盘空间并没有真正释放,需要将硬连接文件也删除,才是真正的释放磁盘空间。

    原文链接:https://blog.csdn.net/weixin_39004901/article/details/89842162
  • 相关阅读:
    我的word发布博客测试
    framework源码调试
    微软发布各个阶段的发布程序
    ora9客户端字符集
    现知道一服务器有合法ip,现在在远端应如何连接到这个服务器访问
    布式Oracle的database link
    怎样用delphi7中的SQLconnection组件远程连接Oracle数据库
    不用安装oracle客户端使用oracle
    有关linux下远程连接(转)
    如何限制某个用户只能FTP不能TELNET?
  • 原文地址:https://www.cnblogs.com/xibuhaohao/p/11880582.html
Copyright © 2020-2023  润新知