• 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
  • 相关阅读:
    UVa 10810
    Android UI开发第三十四篇——SlidingPaneLayout
    eclipse安装插件checkstyle
    eas bos 编辑界面 editUIt 属性值为空
    [置顶] 使用U盘安装ubuntu系统
    Ajax核心——XMLHttpRequest基础
    转储指定的数据块并查看TRC信息
    android 获取当前版本号/修改自定义的应用程序的版本号
    poj3101
    [置顶] mysql中的set和enum类型的用法和区别
  • 原文地址:https://www.cnblogs.com/xibuhaohao/p/11880582.html
Copyright © 2020-2023  润新知