美文网首页
MySQL数据空洞

MySQL数据空洞

作者: 摸摸脸上的胡渣 | 来源:发表于2020-02-14 11:15 被阅读0次

背景

有时候删除了一张表一般的数据,但是查看表占用空间发现并没有发生变化。介是为嘛?

数据空洞

删除导致的数据空洞

InnoDB的底层是B+树,B+树的叶子节点存储数据,因为磁盘预读原理,一般叶子节点的大小会和page的大小保持一致。
当我们删除了数据后,并没有把申请的空间还给操作系统,而是将当前空间标记为“可复用”,这样当新数据插入时,就不同重新再申请空间,可以直接将数据插入到“可复用”的空间中;
这样“可复用”的空间,就称为数据空洞。

插入导致的数据空洞

当向一个page已满的叶子节点插入数据时,为了保证数据均衡,会把所有的数据再进行一次分配,使得两个节点的数据量不会相差太多,但也就会造成有很多的“可复用”空间。

解决方案

  1. 重建一张表,然后把数据刷进新表。
    使用语句 alter table t engine = InnoDB
  2. 在原表的基础上,压缩空间,去掉“可复用”空间。
    使用语句 optimize table t

相关文章

网友评论

      本文标题:MySQL数据空洞

      本文链接:https://www.haomeiwen.com/subject/zwldfhtx.html