一文为你解读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,后续版本逐渐稳定。

延伸问答

MySQL 8.0.12版本引入的INSTANT算法有什么主要功能?

INSTANT算法优化了ADD COLUMN操作,仅修改表元信息,操作时间缩短至秒级。

INSTANT算法在MySQL 8.0.12版本中有哪些限制?

该算法仅支持在已有列的最后添加列,不支持DROP COLUMN。

MySQL 8.0.29版本对INSTANT算法做了哪些改进?

8.0.29版本解决了INSTANT算法的限制,提升了大表操作效率,支持DROP COLUMN。

INSTANT算法如何处理老数据的解析和返回?

INSTANT算法通过维护元数据版本,确保在解析老数据时使用正确的元数据,并在返回时填充缺失列的默认值。

ALTER TABLE语句中如何使用INSTANT算法?

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

INSTANT算法在MySQL中如何维护列的物理位置和逻辑位置的对应关系?

INSTANT算法通过在列元数据中维护physical_pos字段,确保逻辑位置和物理位置的对应关系。

🏷️

标签

➡️

继续阅读