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

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

介绍:

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如图:

文件改变如图:

(0)

相关推荐

  • delete、truncate、drop,千万别用错了。。

    上周同事小姐姐问我:"哈哥你看,我发现MySQL有bug,我下午为了清理磁盘,明明删除了100万条MySQL数据,磁盘不仅没有变小,反而更满了呢??" 那你是怎么删除的? &quo ...

  • Mysql聚簇索引和非聚簇索引

    在mysql数据库中,myisam引擎和innodb引擎使用的索引类型不同,myisam对应的是非聚簇索引,而innodb对应的是聚簇索引.聚簇索引也叫复合索引.聚集索引等等. 聚簇索引:" ...

  • MySQL 8.0 表空间机制

    墨墨导读:数据是以表空间来维护和存放的.在表空间中包含数据,结构,索引等信息,如何有效使用表空间对于MySQL来说非常重要. 数据库的表空间是用来存储数据的逻辑空间,也是存储数据的最大逻辑单元,其下还 ...

  • MySQL 磁盘满了,怎么办??

    问题 使用命令发现磁盘使用率为100%了,还剩几十兆. 一系列神操作: 备份数据库,删除实例.删除数据库表.重启mysql服务.结果磁盘空间均为释放 怎么办 网上查了很多资源,说要进行磁盘碎片化整理. ...

  • (3条消息) MySQL中optimize优化表

    前言 当对MySQL进行大量的增删改操作的时候,很容易产生一些碎片,这些碎片占据着空间,所以可能会出现删除很多数据后,数据文件大小变化不大的现象.当然新插入的数据仍然会利用这些碎片.但过多的碎片,对数 ...

  • mysql中大数据表alter增加字段报错:“1034 Incorrect key file for table 'table

    mysql中大数据表alter增加字段报错:"1034 Incorrect key file for table 'table_name'; try to repair it" 现 ...

  • MySQL中大数据表增加字段,增加索引实现

    回到顶部 MySQL中大数据表增加字段,通过增加索引实现 普通的添加字段sql ALTER TABLE `table_name` ADD COLUMN `num` int(10) NOT NULL D ...

  • 实战经验:关于Oracle Delete数据后空间重用问题的测试

    概述 近期一个客户的一张单表,每天delete7天前的数据,每天的数据增量没什么变化,理论上来说,delete释放的空间是可重用的,但发现该表段最近一直在增长,现在大小为300G,170G的75% – ...

  • MySQL修改数据表名和表字段命令行

    有时候我们有需要更改数据表名和表字段,那么通过什么命令行更改数据表的名称,表的字段更改,增加 ,删除,下面详细说说操作数据表的方法 1,修改表的名称命令行 ALTER TABLE table_name ...

  • MySQL修改数据表(ALTER TABLE语句)

    为实现数据库中表规范化设计的目的,有时候需要对之前已经创建的表进行结构修改或者调整. 在 MySQL 中可以使用 ALTER TABLE 语句来改变原有表的结构,例如增加或删减列.创建或取消索引.更改 ...

  • Linux下修改MySQL数据库数据文件路径

    使用rpm安装方式安装完MySQL数据库后,数据文件的默认路径为/var/lib/mysql,然而根目录并不适合用于存储数据文件. 原路径:/var/lib/mysql 目标路径:/home/mysq ...

  • MYSQL导入数据出现ERROR 1290 (HY000): The MySQL server is running with the

    mysql5.5导出数据提示–secure-file-priv选项问题的解决方法 MYSQL导入数据出现ERROR 1290 (HY000): The MySQL server is running ...

  • ECSHOP数据库MYSQL现有数据表增加新的字段

    执行查询语句: ALTER TABLE `ec_order_info` ADD COLUMN `trade_no`  varchar(100) NOT NULL DEFAULT '' AFTER `p ...

  • Docker定时备份MySQL数据到七牛云

    前言:我Linux服务器安装了docker,docker容器跑了springboot项目,用到了mysql数据库.所以必须准备程序,数据备份功能,万一哪天系统挂了,数据丢了,我可以随时恢复.因为没钱开 ...