表结构的优化

表结构的优化

当库中删除了大量的数据后,您可能会发现数据文件尺寸并没有减小。这是因为删除操作后在数据文件中留下碎片所致。通俗的理解就是,删除数据时,mysql并不会回收被已删除数据的占据的存储空间以及索引位,而是空在那里,等待新的数据来弥补这个空缺。删除操作其实是假删除,空间并没有被释放。所以对于写比较频烦的表,要定期进行optimize,比如一个月一次。用optimizetable(表结构优化)重新压缩表格来回收空间和达到优化性能。

OPTIMIZE TABLE只对MyISAM, BDB和InnoDB表起作用,在OPTIMIZE TABLE运行过程中,MySQL会锁定表。

是个命令

1
2
3
OPTIMIZE TABLE table_name;
或者
OPTIMIZE TABLE [table1],[table2],......[tablen];

注意点:

1)优化表格之前,最好备份一下表格的数据。如果数据非常庞大,优化时间可能需要很长时间。
2)在OPTIMIZE TABLE运行过程中,MySQL会锁定表。如果涉及海量数据的表,应该考虑使用一些运维手段避免现网的服务受到影响。
3)使用alter table table_name engine=innodb 命令也可以同样达到释放空洞的效果。这是由于在转换数据引擎(即便没有真正转换)的时候,mysql也会将表中的数据读取出来,再重新写入,在这个过程中,空洞自然就没有了。

参考:https://blog.csdn.net/qq_36256590/article/details/131549650

1
默认情况下,直接对InnoDB引擎的数据表使用OPTIMIZE TABLE,可能会显示「 Table does not support optimize, doing recreate + analyze instead」的提示信息。这个时候,我们可以用mysqld --skip-new或者mysqld --safe-mode命令来重启MySQL,以便于让其他引擎支持OPTIMIZE TABLE

既然执行是成功的,那为啥会报这个呢?原因应该可以在以下连接中找到
https://www.cnblogs.com/kerrycode/p/10943122.html