一文为你解读MySQL8.0 Instant DDL源码实现

💡 原文中文,约11000字,阅读约需27分钟。
📝

内容提要

MySQL 8.0.12引入INSTANT算法,优化ADD COLUMN操作,仅调整表元信息,操作时间缩短至秒级。最初仅支持在最后添加列,不支持DROP COLUMN。8.0.29版本解决了这些限制,提升大表操作效率,后续版本逐步改进。

🎯

关键要点

  • MySQL 8.0.12版本引入INSTANT算法,优化ADD COLUMN操作,操作时间缩短至秒级。

  • INSTANT算法只支持在已有列的最后添加列,不支持DROP COLUMN。

  • MySQL 8.0.29版本解决了INSTANT算法的限制,提升了大表操作效率。

  • INSTANT算法通过修改表元信息实现ADD/DROP COLUMN操作,而不修改原有数据。

  • INSTANT算法引入元数据版本的概念,以便正确解析和返回老数据。

  • ALTER TABLE语句中可以使用ALGORITHM=INSTANT进行ADD/DROP COLUMNS操作。

  • 元数据version实现涉及表元数据、列元数据和行格式的修改。

  • 在INFORMATION_SCHEMA中新增TOTAL_ROW_VERSIONS字段,记录表的版本信息。

  • 列元数据中新增physical_pos字段,记录列在行中的相对物理位置。

  • INSTANT算法维护逻辑位置和物理位置的对应关系,确保数据按正确顺序返回。

  • INSTANT ADD/DROP COLUMN功能在MySQL 8.0.29版本中初期存在bug,后续版本逐渐稳定。

➡️

继续阅读