表空间整理

1:为啥删除了表的一半数据,表文文件大小没变化?
innodb里面的数据都是b+ tree结构组织的,如果要删除一行数据,innodo只是将这行记录标记为 删除。后续可能会复用这个位置。

因为delete 命令其实只是把记录的位置,或者数据页标记为了“可复用”,但磁盘文件的大小是不会变的。
也可以认为是一种逻辑删除,所以物理空间没有实际释放,只是标记为可复用,表文件的大小当然是不变的啦!
这些可以复用,而没有被视同的空间,看起来像’空洞‘
如果我们删除掉一个数据页上所有记录删除,整个数据页就是可复用。

2:表的数据信息存在哪里?
参数;innodb_file_per_table off 表数据放在共享表空间,纪实表删除了,空间也不会回收。

参数;innodb_file_per_table on 单独存储在一个以.ibd为后缀的文件里,
由参数innodb_file_per_table来控制,为一个单独的文件来存储,这样非常容易管理,并且在不需要的时候,
使用drop table命令也能直接把对应的文件删除,如果存储在共享空间之中即使表删除了空间也不会释放。

3:表的结构信息存在哪里?

首先,表结构定义占有的存储空间比较小,在MySQL8.0之前,表结构的定义信息存在以.frm为后缀的文件里,
在MySQL8.0之后,则允许把表结构的定义信息存在系统数据表之中。

系统数据表,主要用于存储MySQL的系统数据,比如:数据字典、undo log(默认)等文件

4:如何才能删除表数据后,表文件大小就变小?

重建表,消除表因为进行大量的增删改操作而产生的空洞,使用如下命令:

1:alter table t engine=InnoDB

2:optimize table t( 等于 recreate+analyze)。

3:truntace table t (等于drop+create)

5:空洞是啥?咋产生的?

空洞就是那些被标记可复用但是还没被使用的存储空间。

使用delete命令删除数据会产生空洞,标记为可复用

插入新的数据可能引起页分裂,也可能产生空洞

修改操作,有时是一种先删后插的动作也可能产生空洞

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值