前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MYSQL 可以压缩或回收磁盘空间吗

MYSQL 可以压缩或回收磁盘空间吗

作者头像
AustinDatabases
发布2023-02-28 14:40:30
1.9K0
发布2023-02-28 14:40:30
举报
文章被收录于专栏:AustinDatabases
MYSQL 的数据库中的表,在使用中因为插入,删除或者UPDATE 等会产生页面的碎片,而碎片多了就会产生页面中不可用的数据空白,空白多了就会导致实际上存储的数据和在文件上生成的数据文件之间的差异,导致磁盘空间浪费的问题。

MYSQL 的数据库中表支持单表单文件的特性,而我们的optimize table 主要的面对表在大量UPDATE 或者删除数据后的优化工作。

首先我们可以确认optimize table 对于数据库是有必要操作的,尤其针对业务中对表操作中充斥了大量的insert ,update,delete 等操作,使用这个命令可以让数据库重新的组织数据和重组,并且已经可以被释放的磁盘空间可以在释放给操作系统。

在很多情况下,数据表本身可能根本不大,但是在占用操作系统层面上,占用的数据量很大。

在这样的情况下,我们就需要针对这样的表进行清理的工作了,optimize table 主要面对在数据表中存在的varchar ,varbinary,blob, text 等大量应用在表中,并且被清理后的情况也适合使用 optimize table.

为什么要进行表的收缩的工作,主要的原因如下

1 表占用的数据空间,比实际的数据应该占用的表空间要大

2 表在全表扫描的过程中,比碎片少的数据表,扫描的时间明显长,尤其在进行如 count 操作等

3 影响数据插入的性能,因为数据在碎片中插入数据的性能明显比在没有碎片的页面中插入数据的速度要快。

针对INNODB 的表,我们在操作中会直接得到如下的信息

这是因为 optimize table 在INNODB表中的操作转变为

alter table table_name engine = 'innodb';

analyze table table_name;

或者

alter table table_name force;

analyze table table_name;

这个操作中会锁表,产生一个新的表,并将数据复制到新表中,在将老表清理掉,新表改为原来的表名。

要进行这个操作,需要如下的一些工作

在数据库安装之初,咱们的 innodb_file_per_table = 1

同时需要对表的data_free 进行,检查,如果 data free 比较大的情况下对比实际的表,就说明表中的碎片是比较大,需要进行数据的整理。

另一种对表得数据压缩的方式也可以将表进行处理,直接将表的数据格式转变为 compressed ,通过这样的方式对于一些 varchar, text blob 等字段类型较多的表进行空间方面的缩减。但 如果表中的字段都是整形或数值型的状态,那么表基本上就不会被压缩。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-01-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AustinDatabases 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档