You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何校验MySQL使用INPLACE算法执行DDL时表未被替换重建

关于MySQL 5.7 INPLACE加索引后CREATE_TIME更新的问题解答

首先明确CREATE_TIME字段的含义

MySQL 5.7中INFORMATION_SCHEMA.TABLES的CREATE_TIME字段记录的是表对应的.frm元数据文件的最后修改时间,不是表的首次创建时间。执行INPLACE模式加二级索引操作时,需要修改表的元数据信息更新frm文件,因此该字段值会更新,和表是否被重建没有关联。

确认DDL是否重建表的几个可靠方法

  • 看ALTER语句执行返回结果:COPY模式需要全量拷贝原表数据,执行完成后返回结果会显示Query OK, N rows affected,N等于表的总行数;INPLACE模式加二级索引不会全量拷贝数据,返回结果为Query OK, 0 rows affected。
  • 查看InnoDB的表空间ID:DDL执行前后分别执行查询
SELECT space FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE name='库名/表名';

如果两次查询返回的space值完全一致,说明原表空间没有被替换,表没有被重建。如果是COPY模式,会生成新的表空间,space值会发生变化。

  • 观察DDL执行过程中的临时文件:COPY模式执行时会生成#sql-开头的全量临时表文件,大小和原表.ibd文件接近;INPLACE加二级索引只会生成临时排序文件,不会生成和原表大小一致的临时表文件。
  • 查看InnoDB引擎状态:DDL执行完成后执行SHOW ENGINE INNODB STATUS,在最近的DDL记录中会明确标注该操作使用的ALGORITHM模式,可直接确认是否为INPLACE。

补充说明

ALGORITHM=INPLACE模式加二级索引不会重建表,仅会在原表空间中新增对应的索引数据,不会替换原表的行数据存储结构,符合官方文档的描述。

内容的提问来源于stack exchange,提问作者bumsoo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 21:48:03