加入收藏 | 设为首页 | 会员中心 | 我要投稿 我爱资讯网 (https://www.52junxun.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

MySQL中optimize优化表

发布时间:2022-12-15 11:15:22 所属栏目:MySql教程 来源:
导读:  前言

  当对MySQL进行大量的增删改操作的时候,很容易产生一些碎片,这些碎片占据着空间mysql 优化,所以可能会出现删除很多数据后,数据文件大小变化不大的现象。当然新插入的数据仍然会利用这些碎片。但
  前言
 
  当对MySQL进行大量的增删改操作的时候,很容易产生一些碎片,这些碎片占据着空间mysql 优化,所以可能会出现删除很多数据后,数据文件大小变化不大的现象。当然新插入的数据仍然会利用这些碎片。但过多的碎片,对数据的插入操作是有一定影响的,此时,我们可以通过optimize来对表的优化。
 
  为了更加直观的看到数据碎片,Mysql可以使用如下命令查看
 
  show table status [like table_name]
 
  data_free选项代表数据碎片。
 
  针对MySQL的不同数据库存储引擎,在optimize使用清除碎片,回收闲置的数据库空间,把分散存储(fragmented)的数据和索引重新挪到一起(defragmentation),对I/O速度有好处。
 
  当然optimize在对表进行操作的时候,会加锁,所以不宜经常在程序中调用。
 
  MyISAM存储引擎
 
  针对MyISAM表,直接使用如下命令进行优化
 
  optimize table table1[,table2][,table3]
 
  如果同时优化多个表可以使用逗号分隔。
 
  下面优化dede_member_vhistory表,可以看出,优化后data_free值为0。
 
  #InnoDB存储引擎
 
  InnoDB引擎的表分为独享表空间和同享表空间的表,我们可以通过show variables like ‘innodb_file_per_table’;来查看是否开启独享表空间。
 
  我本地是开启了独享表空间的。此时是无法对表进行optimize操作的,如果操作,会返回如图信息,最后的一条Table does not support optimize, doing recreate + analyze instead。因为该结构下删除了大量的行,此时索引会重组并且会释放相应的空间因此不必优化。
 
 
 

(编辑:我爱资讯网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!