ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

mysql delete 数据之后 .MYD文件大小没有发生变化

2020-08-26 18:03:10  阅读:308  来源: 互联网

标签:文件大小 name 删除 mysql OPTIMIZE table TABLE MYD delete


介绍:

delete只是将数据标识为删除,并没有整理数据文件,当插入新数据后,会再次使用这些被置为删除标识的记录空间。(当DELETE后面跟条件的时候 是这种情况,不跟条件直接delete的时候,则不会有这种情况)如
delete from table_name和delete from table_name where 不带条件的语句清空了表,myd文件大小为0;但是带条件的删除了整个表以后,myd和文件的大小不变。举个例子,100个程序员辞职走了,但是公司100个职位还在,没有撤销,需要等新的程序员进来蹲这些坑,但是呢,招到一个合适程序员需要时间,大多数时间,这个位置就空在那里了。文件大小没变原因,这是因为删除操作后在数据文件中留下碎片所致,当你删除数据 时,mysql并不会回收被已删除数据的占据的存储空间,以及索引位。

解决办法:

1.扩充单表容量
先查看表的状态:show table status like 'table_name',然后修改表的容量:alter table_name max_rows=2000000000000,avg_low_length=500000。
如图:

2.释放表空间
执行 SHOW TABLE STATUS
返回的记录中有一个 Date_free 字段.它显示的是 MyISAM 的表浪费空间.
如图:

上图所示,我是删除了80%的历史日志,但是myd文件大小没有变化,如下图:

使用 OPTIMIZE TABLE 指令可以优化它.
OPTIMIZE TABLE 是指对表进行优化。如果已经删除了表的一大部分数据,或者如果已经对含有可变长度行的表(含有 VARCHAR 、 BLOB 或 TEXT 列的表)进行了很多更改,就应该使用 OPTIMIZE TABLE 命令来进行表优化。这个命令可以将表中的空间碎片进行合并,并且可以消除由于删除或者更新造成的空间浪费 。OPTIMIZE TABLE 命令只对 MyISAM 、 BDB 和 InnoDB 表起作用 。表优化的工作可以每周或者每月定期执行,对提高表的访问效率有一定的好处,但是需要注意的是,优化表期间会锁定表,所以一定要安排在空闲时段进行。
执行:
OPTIMIZE TABLE table_name;
成功以后,data_free如图:

文件改变如图:

标签:文件大小,name,删除,mysql,OPTIMIZE,table,TABLE,MYD,delete
来源: https://www.cnblogs.com/stronger-xsw/p/13566541.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有