300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > mysql删除数据后释放磁盘空间

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

时间:2022-10-11 03:26:27

相关推荐

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 --在服务器上连接mysqlmysql>use db_name;

删除数据并执行了optimize table释放了磁盘空间;optimize命令优化表 不要频繁操作,另外还发现执行optimize命令 Innodb 引擎的数据库下ibtmp1 文件由原来的几个G优化成12M了。

但如果数据每天都大量插入,删除数据后不执行optimize tableinsert 数据的时候会占用已经删除那部分数据的空间,数据文件所占用的磁盘空间短时间并不会增长,所以要减少数据文件占用磁盘空间,可以对表进行压缩。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。