mysql删除数据后释放磁盘空间

drop table table_name 立刻释放磁盘空间 ,不管是 Innodb和MyISAM ;

truncate table table_name立刻释放磁盘空间 ,不管是 Innodb和MyISAM;

delete from table_name 删除表的全部数据,对于MyISAM 会立刻释放磁盘空间 ,而InnoDB 不会释放磁盘空间;

delete from table_name where xx 带条件的删除, 不管是innodb还是MyISAM都不会释放磁盘空间;

delete操作后使用optimize table table_name 释放磁盘空间,优化表期间会锁定表,所以要在空闲时段执行optimize table ,测试十几个G数据的表执行optimize table 大概20多分钟。

注:delete删除数据的时候,mysql并没有把数据文件删除,而是将数据文件的标识位删除,没有整理文件,因此不会彻底释放空间。被删除的数据将会被保存在一个链接清单中,当有新数据写入的时候,mysql会利用这些已删除的空间再写入。即,删除操作会带来一些数据碎片,正是这些碎片在占用硬盘空间。
OPTIMIZE TABLE命令优化表,该命令会重新利用未使用的空间,并整理数据文件的碎片;该命令将会整理表数据和相关的索引数据的物理存储空间,用来减少占用的磁盘空间,并提高访问表时候的IO性能;但是具体对表产生的影响是依赖于表使用的存储引擎的。该命令对视图无效。

使用optimize table table_name出现Table does not support optimize, doing recreate + analyze instead 的解决办法:

innodb的数据库不支持optimize,可以用 ALTER TABLE table.name ENGINE='InnoDB';对旧表以复制的方式新建一个新表,然后删除旧表。操作前最好备份表。
重新启动mysql ,在启动的时候指定–skip-new或者–safe-mode选项来支持optimize功能 再执行optimize table table_name

>/usr/local/mysql/bin/mysqladmin -uroot -p shutdown  --停止mysql
>/usr/local/mysql/bin/mysqld --skip-new &  --启动mysql
>mysql -uroot -p   --在服务器上连接mysql
mysql>use db_name;

删除数据并执行了optimize table释放了磁盘空间;optimize命令优化表 不要频繁操作,另外还发现执行optimize命令 Innodb 引擎的数据库下ibtmp1 文件由原来的几个Gy优化成12M了。
但如果数据每天都大量插入,删除数据后不执行optimize table, insert 数据的时候会占用已经删除那部分数据的空间,数据文件所占用的磁盘空间短时间并不会增长,所以要减少数据文件占用磁盘空间,可以对表进行压缩。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 今天看到一位朋友写的mysql笔记总结,觉得写的很详细很用心,这里转载一下,供大家参考下,也希望大家能关注他原文地...
    信仰与初衷阅读 4,826评论 0 30
  • https://blog.csdn.net/steven_liwen/article/details/531884...
    SkTj阅读 2,462评论 0 16
  • 一、MySQL优化 MySQL优化从哪些方面入手: (1)存储层(数据) 构建良好的数据结构。可以大大的提升我们S...
    宠辱不惊丶岁月静好阅读 2,651评论 1 8
  • MySQL数 据库引擎取决于MySQL在安装的时候是如何被编译的。要添加一个新的引擎,就必须重新编译MYSQL。在...
    时待吾阅读 1,718评论 0 4
  • 案情:被告人甲、乙共同将被害人丙杀害。一审程序中,在公诉人对被告人甲、乙同时进行讯问后,经审判长许可丙的父亲丁以附...
    杨铖学法阅读 219评论 0 0

友情链接更多精彩内容