使用传统方法执行加列操作时,需要重建整个表数据,占用大量系统资源。PolarDB MySQL新增支持秒级加字段(Instant add column)功能,在加列操作时只需变更表定义信息,无需修改已有数据,帮助您快速完成对任意大小的表的加列操作。本文介绍如何使用秒级加字段功能。

前提条件

集群版本需为以下版本之一:
  • PolarDB MySQL 5.7且修订版本为5.7.1.0.6或以上,您可以通过查询版本号确认集群的修订版本。
    说明 您需要先配置innodb_support_instant_add_column参数才能在PolarDB MySQL 5.7集群上使用该功能。
  • PolarDB MySQL 8.0。
    说明 PolarDB MySQL 8.0集群默认支持秒级加字段功能,无需配置任何参数。

使用限制

  • 新增列只能为表的最后一列。
  • 不支持虚拟列(PolarDB MySQL8.0支持)。
  • 不支持分区表(PolarDB MySQL8.0支持)。
  • 不支持使用了全文索引的表。
  • 不支持开启了Implicit primary key选项且未自定义主键的表。
  • 不支持在同一条SQL中同时执行其它DDL操作和Instant add column操作。

使用方法

  • 参数说明

    针对PolarDB MySQL 5.7集群,您需要开启innodb_support_instant_add_column参数来使用秒级加字段功能。

    说明 PolarDB MySQL 8.0集群无需配置该参数即可直接使用秒级加字段功能。
    参数 级别 说明
    innodb_support_instant_add_column Global 秒级加字段功能的开关,取值范围如下:
    • ON:开启秒级加字段功能
    • OFF:关闭秒级加字段功能(默认值)
  • 语句
    • 指定ALGORITHM=INSTANT以强制使用秒级加字段功能,语句示例如下:
      ALTER TABLE test.t ADD COLUMN test_column int, ALGORITHM=INSTANT;

      使用上述语句时,若返回ERROR 0A000: ALGORITHM=INSTANT is not supported for this operation. Try ALGORITHM=COPY/INPLACE. 的错误,表示当前加列操作不能以Instant算法执行,建议您查看innodb_support_instant_add_column参数是否已开启,并仔细核对使用限制

    • 不指定ALGORITHM或指定ALGORITHM=DEFAULTPolarDB会自行选择执行速度最快的算法来执行加列操作,语句示例如下:
      ALTER TABLE test.t ADD COLUMN test_column int, ALGORITHM=DEFAULT;
      ALTER TABLE test.t ADD COLUMN test_column int;
      说明 PolarDB算法选择的优先级为INSTANT > INPLACE > COPY。
  • 查看通过Instant算法增加的列信息
    INFORMATION_SCHEMA数据库中新增了INNODB_SYS_INSTANT_COLUMNS表。该表记录了使用Instant算法增加的列信息,例如列名、列序号和默认值(二进制方式存储)等。您可通过如下语句查看该表详情来确认新增的列信息。
    SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_INSTANT_COLUMNS;
    说明 对目标表使用了Instant算法增加列后,如果执行了需要重建表的DDL操作(如DROP COLUMN),系统将会删除INNODB_SYS_INSTANT_COLUMNS表中目标表的相关列信息。