INSTANT 加列为什么不用改老数据
INSTANT 只改数据字典,原理是给行加了版本号:
- 字典里记下每列是第几版加的、默认值是多少。
- 每行的行头记着自己是按第几版写的。
- 读老行时,按它的版本把后来加的列补上默认值。
我一开始以为这是「空间换时间」,其实更准确是推迟:逐行改格式的活被推到了以后。读老行时顺手翻译,更新这一行时顺手按新格式重写,下次重建表时一次做完。加列反而更省空间,因为老行不存默认值。
版本限制要注意:8.0.12 到 8.0.28 的 INSTANT 只能把列加在表的最后;任意位置加列、INSTANT 删列要 8.0.29 起。生产库版本较老时先确认一下。