【MYSQL】delete把我磁盘空间给"吃"了
前言 记得在很久之前,我在学习某个关于MYSQL的课程时,需要插入大量的随机数据,约500W,插入之后硬盘空间直接少了约10G(具体大小取决于你插入什么样的数据),到这里位置我都觉得一切正常。可在之后,让我觉得"魔幻"的事情发生了。 我当时想利用这批已插入的数据测测我电脑跑delete语句的速度,然后我就编写代码,用delete语句删除了大概80%的数据。 整个删除过程都很顺利,可当我删完后查看一下磁盘空间,发现磁盘只多了1G,我整个人都懵了,在约10G的数据里我可是删了80%,怎么才还给我1G?难道我装的MYSQL里有个病毒? 虽然当时通过百度的方法勉强让MYSQL"吐"出了4,5G空间,但我还是不明白为啥会这样,直到我前一段时间看到相关书籍有讲解这一块,才终于解开了疑惑。 小贴士:你可能会疑惑,明明删除了80%的数据,但为什么才"吐"出来4G多?那是因为占用磁盘的可不止我们插入的数据,还有我们的插入&删除时候的操作记录,即binlog,而且根据binlog的格式不同,占用的存储空间也会有差异。 PS:无特别说明,环境默认是MYSQL5.7.21+InnoDB+默认配置。 Delete过程的空间去哪了 在这里我同样先无视锁机制、内存变化等因素,因为我们在讨论的主要是:执行Delete过程中,被删除的数据所占有的存储空间到底怎么了? 为了方便,我在这里借用一下掘金小册的图描述过程: