mysql 删除数据后表占用空间还是很大

引用博客:
  >> stephen one:mysql 删除数据后表占用空间还是很大.

以下是我遇到的问题:

1、现有一个数据库,通过查询语句

select
table_schema as '数据库',
table_name as '表名',
table_rows as '记录数',
truncate(data_length/1024/1024, 2) as '数据容量(MB)',
truncate(index_length/1024/1024, 2) as '索引容量(MB)'
from information_schema.tables
where table_schema='database3'
order by data_length desc, index_length desc;

  得到结果如下:
在这里插入图片描述

2、执行指定表的删除操作,SQL语句如下:

delete from plcalarmlogs
where 采集时间
between '2021/04/25 13:54:31' and '2022/05/25 13:54:31'

  结果:
在这里插入图片描述

3、出现的问题:
  执行了删除操作,数据也确实查不到了,但数据容量却很大

4、问题出现原因:
  在删除sql语句中,凡是使用像,delete…where… 结构的,都不是真删除,只是MySQL给记录加了个删除标识,自然这样操作后表数据占有空间也不会变小了。

5、解决办法:
  使用下面SQL语句来回收未使用的空间,并整理数据文件的碎片。

OPTIMIZE TABLE 表名

  
  

6、附加(这部分我没有用到,仅做搬用记录)
  OPTIMIZE TABLE 只对MyISAM, BDB表起作用,。
innodb的数据库不支持optimize,可以用下面的SQL语句(前提是innodb_file_per_table = ON)

ALTER TABLE tableName ENGINE='InnoDB'

该方法会对旧表以复制的方式新建一个新表,然后删除旧表。虽然这个过程是安全的,但是在进行操作时还是先进行备份为好。
然后对表的索引信息做重新统计

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值