mysql add column 慢_MySQL8.0新特性: Instant Add Column

对于redundent类型,由于已经有了列个数信息,无需进行修改

数据词典信息

对数据词典进行了扩展并记录:

在第一次instant add column之前的列个数

每次加的列的默认值

通过这些信息加上记录上的额外信息,可以正确解析出记录上的数据

数据词典:

a) dd::Table::se_private_data::instant_col:在第一次instant ADD COLUMN之前表上面的列的个数b) dd::Partition::se_private_data::instant_col, 和a类似,存储分区表上instant col的个数,但有所不同的是,分区表上的分区之间可能存在不同列的个数。因为我们单独truncate一个分区,而truncate操作会清空instant标记,因此b)中存储的instant_col不应该比a)中每个分区上的instant_col要小 c) dd::Column::se_private_data::default_null, 表示默认值为NULLd) dd::Column::se_private_data::default, 当默认值不为null时,这里存储默认值DD_instant_col_val_coder--- column default value需要从innodb类型byte转换成se_private_data中的text类型(char), 使用一个类型DD_instant_col_val_coder来辅助转换

example: 0XFF => 0x0F, 0x0F

在将表load到内存建立表对象dict_table_t和索引对象dict_index_t时,有几个关键成员要载入进来,因为会用于辅助解析记录

dict_table_t::n_instant_cols  第一次instant add column之前的非虚拟列个数,(包含系统列dict_index_t::instant_cols flag用于标示是否存在Instant column

dict_index_t::n_instant_nullable: 第一次instant add column之前的可为null的列个数

dict_col_t::instant_default: 存储默认值及其长度, 当解析数据时看到Instant column, 会直接引用到这里的数据指针

载入逻辑:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值