MySQL数据库中进行表空间整理,可以用的一种操作就是optimize table,

OPTIMIZE [NO_WRITE_TO_BINLOG | LOCAL]TABLE tbl_name [, tbl_name] ...

P.S. 参考《小白学习MySQL - 表空间碎片整理方法》。

optimize table会重组表数据和索引的物理存储,减少对存储空间使用和提升访问表时io效率。optimize table后,表的变化和存储引擎也有关。

对于MyISAM表,optimize table操作执行以下工作:
1.如果表含有删除的列、分列的列,optimize table会修复表。
2.如果索引页没有排序,optimize table会将索引页进行排序。
3.如果表的统计信息不是最新的,optimize table会更新索引信息。

对InnoDB表执行optimize table操作的时候,会报"Table does not support optimize, doing recreate + analyze instead"提示,有种观点认为optimize table不支持innodb表,其实这就看怎么理解了。

的确,官方文档提到了,对于InnoDB的表,不支持optimize table,

OPTIMIZE TABLE using online DDL is not supported for InnoDB tables that contain FULLTEXT indexes. The table copy method is used instead.

我们做个实验,t_per表存储引擎是InnoDB,

mysql> show table status like 't_per'\G
*************************** 1. row ***************************Name: t_perEngine: InnoDBVersion: 10Row_format: DynamicRows: 998631Avg_row_length: 29Data_length: 29949952
Max_data_length: 0Index_length: 0Data_free: 6291456Auto_increment: NULLCreate_time: 2021-08-01 09:02:10Update_time: 2021-08-01 11:31:00Check_time: NULLCollation: utf8mb4_general_ciChecksum: NULLCreate_options: Comment:
1 row in set (0.00 sec)

包含了100万条数据,

mysql> select count(*) from t_per;
+----------+
| count(*) |
+----------+
|  1000000 |
+----------+
1 row in set (0.32 sec)

存储空间占了40M,

-rw-r-----. 1 mysql mysql  40M Aug  1 11:31 t_per.ibd

我们删除2/3的数据,

mysql> delete from t_per where id%3<>0;

表的状态信息,

mysql> show table status like 't_per'\G
*************************** 1. row ***************************Name: t_perEngine: InnoDBVersion: 10Row_format: DynamicRows: 332690Avg_row_length: 39Data_length: 13123584
Max_data_length: 0Index_length: 0Data_free: 1049576Auto_increment: NULLCreate_time: 2021-08-01 13:53:10Update_time: NULLCheck_time: NULLCollation: utf8mb4_general_ciChecksum: NULLCreate_options: Comment:
1 row in set (0.00 sec)

我们知道,如果不整理表,删除的空间,是无法释放的,我们对这张表执行指令optimize table,提示如下信息,

mysql> optimize table t_per;
+-------------+----------+----------+-------------------------------------------------------------------+
| Table       | Op       | Msg_type | Msg_text                                                          |
+-------------+----------+----------+-------------------------------------------------------------------+
|bisal.t_per | optimize | note     | Table does not support optimize, doing recreate + analyze instead |
| bisal.t_per | optimize | status   | OK                                                                |
+-------------+----------+----------+-------------------------------------------------------------------+

看下磁盘空间,此时数据文件,已经是17M,说明空间整理生效了,

-rw-r-----. 1 mysql mysql  17M Aug  1 13:53 t_per.ibd

因此,从严格的意义讲,说InnoDB不支持optimize table,其实不太准确,如官方文档所说,InnoDB引擎的表,optimize table会自动转成alter table ... force,相当于做了recreate和analyze,

For InnoDB tables, OPTIMIZE TABLE is mapped to ALTER TABLE … FORCE, which rebuilds the table to update index statistics and free unused space in the clustered index. This is displayed in the output of OPTIMIZE TABLE when you run it on an InnoDB table, as shown here:

因此,对InnoDB,optimize table封装了其他操作,但对执行者来说,optimize table是执行成功的,因为他做了重建表和更新索引统计信息并释放空间的操作。

参考,

https://dev.mysql.com/doc/refman/5.7/en/optimize-table.html

https://www.cnblogs.com/abclife/p/9573578.html

小白学习MySQL,

《小白学习MySQL - table_open_cache的作用》

《小白学习MySQL - 表空间碎片整理方法》

《小白学习MySQL - 大小写敏感问题解惑》

《小白学习MySQL - only_full_group_by的校验规则》

《小白学习MySQL - max_allowed_packet》

《小白学习MySQL - mysqldump保证数据一致性的参数差异》

《小白学习MySQL - 查询会锁表?》

《小白学习MySQL - 索引键长度限制的问题》

《小白学习MySQL - MySQL会不会受到“高水位”的影响?》

《小白学习MySQL - 数据库软件和初始化安装》

《小白学习MySQL - 闲聊聊》

近期更新的文章:

《拼接字符串SQL需求》

《《SQL Cookbook》 - 第二章 查询结果排序》

《2021雷军年度演讲 - 我的梦想,我的选择》

《梅西 ≠ 一人一城?》

《Oracle字符串类型扩容隐患》

文章分类和索引:

《公众号800篇文章分类和索引》

小白学习MySQL - InnoDB支持optimize table?相关推荐

  1. 小白学习MySQL - 一次慢SQL的定位

    同事提了个问题,某套测试环境MySQL执行语句出现hang. 作为小白,每次碰到问题,都是在积累经验.执行SQL出现hang,说明应该有会话处于等待状态,可以通过show processlist看下当 ...

  2. 小白学习MySQL - 不同版本创建用户的些许区别

    MySQL创建用户有很多种方法,例如常规create user,再通过grant,授予权限,还可直接grant连带创建用户和授权一起做了.最近创建过程中,发现不同版本操作有些区别. MySQL 5.7 ...

  3. 小白学习MySQL - 聊聊数据备份的重要性

    最近某套MySQL数据库服务器异常关机,导致MySQL不能正常拉起来,启动过程中,error日志中记录了如下的信息,可以看到,数据库因为异常关闭,此时会进行实例恢复的操作, [Note] InnoDB ...

  4. 小白学习MySQL - 增量统计SQL的需求

    这篇文章在爱可生开源社区首发<技术分享 | MySQL中一个聚类增量统计 SQL 的需求>. 同事提了一个MySQL数据库中SQL增量统计的问题,我用测试数据模拟一下,测试表tt有三个字段 ...

  5. 小白学习MySQL - Generated Columns功能

    碰巧看到MySQL有这种的语法"INTEGER GENERATED ALWAYS AS IDENTITY",一知半解,了解一下. 官方文档介绍了这种Generated Column ...

  6. 小白学习MySQL - varchar类型字段为什么经常定义成255?

    很多时候我们看到一些表字符串类型的字段定义为varchar(255),开始以为varchar只能定义为255这个长度值,其实不然. 官方文档所说,varchar有效的最大长度取决于行的容量,以及用的字 ...

  7. MySQL Innodb存储引擎 Table does not support optimize, doing recreate + analyze instead 解决方案

    一.背景 电商平台每天几百万的库存流水记录,库存流水记录越来越大,后面所以要定期清理(做delete操作),只保存仅15天的,但是由于库存流水表中有很多变长的字段(varchar),所以采用delet ...

  8. 小白学习MySQL - 数据库软件和初始化安装

    作为个人学习环境来说,搭建一套VMWare的环境,算是性价比最高的一种选择,当然你可以购买一些公有云服务器(有些则是免费的,例如Oracle Cloud,可参考<Oracle Cloud云端账号 ...

  9. mysql进阶:optimize table 优化表命令 Table does not support optimize, doing recreate + analyze instead

    optimize table table_name 1. 问题描述 在使用mysql的时候有时候,可能会发现尽管一张表删除了许多数据,但是这张表表的数据文件和索引文件却奇怪的没有变小.这是因为mysq ...

最新文章

  1. POJ 2586 Y2K Accounting Bug(贪心)
  2. Delphi从Internet下载文件
  3. Java算法--插入排序算法
  4. boost::callable_traits的is_invocable的测试程序
  5. 使用Azure Pipelines来实现Teams App的CI
  6. 资源不足的情况怎么设置sparkrdd并行度_监控录像机资源不足或达到上限的原因及解决方法!...
  7. nuget.org 无法加载源 https://api.nuget.org/v3/index.json 的服务索引
  8. linux 0.11 内核学习 -- bootsect.s, 万里长征第一步
  9. 通信原理实践(五)——2PSK 与2DPSK 通信系统
  10. 儿童智能手表方案/案列/APP/小程序/网站
  11. CRLF、CR、LF详解
  12. 22岁天才少女加入华为,曾获“编程界的奥林匹克”世界冠军
  13. html文件变成桌面背景,将HTML文档设置为Windows桌面背景
  14. 关于stylegan3第一次运行编译filtered_lrelu_plugin出错的问题
  15. MPC5748G笔记 CAN can_pal
  16. cj.exceptions.CJException: Access denied for user XX to database 问题解决记录
  17. android:state_pressed是什么意思?
  18. FTP使用教程之Filezilla使用教程
  19. Android序列化经典解析(三)-拨乱反正,堪比窦娥的Serializable
  20. HBase如何快速查询

热门文章

  1. 从苹果学习宣传语/广告语的优化 – Apple 文案初品(转载)
  2. 上海市教育委员会关于进一步加强义务教育阶段学校写字教学的若干意见
  3. 【论文翻译】GCN-Semi-Supervised Classification with Graph Convolutional Networks(ICLR)
  4. SwiftUI TabView设置选中Item颜色和Tab背景颜色 教程含源码
  5. vue基础:Vue动画
  6. EventLog Analyzer与市场上其他日志审计工具相比有哪些优势?
  7. 请简述计算机软件发展的演变过程,计算机软件的发展演变简介
  8. 值得收藏的146条民间小偏方
  9. 从外观到体验 真假戴森吹风机差距有多大?
  10. linux查找文件模糊名字,linux中模糊查找文件