开发者

mysql中如何优化表释放表空间

开发者 https://www.devze.com 2023-02-19 09:01 出处:网络 作者: 风神幻龙
目录mysql优化表释放表空间mysql空间释放查询占用空间大小清理碎片总结mysql优化表释放表空间
目录
  • mysql优化表释放表空间
  • mysql空间释放
    • 查询占用空间大小
    • 清理碎片
  • 总结

    mysql优化表释放表空间

    方法一:optimize table table_name

    这是我们经常见到的方法,这里就不在过多介绍。

    方法二:alter table table_name engine=engine_name

    该方法通常用于切换表的引擎,例如MyISAM转为InnoDB,但是同样适用于释放表空间,只不过切换后的引擎和原来的engine相同罢了。

    注意事项

    1.这两种方式都适用于我们常用的表,myisam和innodbCoqlCalTq。

    2.优化表的时候会锁表,数据表越大,耗时越长,因此不要在网站忙时php进行表优化。

    mysql空间释放

    今天还原了一个数据库。发现数据量有数十GB,想着看看哪些表的数据量多,于是查询了下。数据还真不少。3000多万行,这儿一张表居然有近1400万数据。....惭愧。以前没做什么处理。

    USE information_schema; #使用数据库元数据;
    SELECT table_name,table_rows FROM TABLES WHERE table_schema = 'tjpro' order by table_rows desc; #查询表名和表行数,数据库为tjpro
    SELECT sum(table_rows) FROM tables WHERE 开发者_MongoDBtable_schema = 'tjpro'; #统计行数
    SELECT table_name,table_rows FROM tables WHERE table_schema = 'tjpro' order by table_rows desc limit 100; #查询最多行数的表前100

    mysql中如何优化表释放表空间

    mysql中如何优化表释放表空间

    使用delete删除mysql数据的时候,mysql并没有把数据文件删除,而是将数据php文件的标识位删除,没有整理文件,因此不会彻底释放空间。被删除的数据将会被保存在一个链接清单中,当有新数据写入的时候,mysql会利用这些已删除的空间再写入。即,删除操作会带来一些数据碎片,正是这些碎片在占用硬盘空间。 -- 引自mysql

    如何整理,清理这些空间呢,请往下看。

    查询占用空间大小

    这时候,我删除了数据最多的mis_system_data_remind_mas 表(测试库哟)之后。我再次查询该表占用的空间大小。

    SELECT TABLE_NAME, (DATA_LENGTH+INDEX_LENGTH)/1048576, TABLE_ROWS FROM information_schema.tables WHERE TABLE_SCHEMA='dbname' AND TABLE_NAME='tablename(你的表名)';

    mysql中如何优化表释放表空间

    默认是M为单位。第二栏。约为2.8个GB大小。

    • 然后清理一下。使用:OPTIMIZE TABLE

    清理碎片

    官方推荐使用 OPTIMIZE TABLE 命令来优化表,该命令会重新利用未使用的空间,并整理数据文件的碎片。js

    mysql中如何优化表释放表空间

    等待的时间有点长。等完成后,再次查询空间:

    SELECT TABLE_NAME, (DATA_LENGTH+INDEX_LENGTH)/10485android76, TABLE_ROWS FROM information_schema.tables WHERE TABLE_SCHEMA='dbname' AND TABLE_NAME='tablename(你的表名)';

    mysql中如何优化表释放表空间

    可以看到,释放的空间约为2.8GB。

    总结

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

    0

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    关注公众号