La forma tradicional de agregar columnas requiere reconstruir toda la tabla, lo que consume muchos recursos del sistema. PolarDB for MySQL admite la adición instantánea de columnas en sus clústeres. Con esta función, puede agregar columnas a tablas de cualquier tamaño en cuestión de segundos.
La función de adición instantánea de columnas utiliza INSTANT algorithm para ejecutar operaciones DDL. Solo modifica los metadatos del diccionario de datos, sin alterar ni copiar información histórica, y tampoco reconstruye la tabla. Por lo tanto, este proceso funciona sin importar el tamaño de la tabla. Toda la operación DDL se completa en segundos.
Versiones compatibles
El clúster debe ejecutar una de las siguientes versiones:
-
PolarDB for MySQL 5.6 con la revisión 5.6.1.0.43 o posterior.
NotaLa función de adición instantánea de columnas para PolarDB for MySQL 5.6 se encuentra en versión canary. Para usarla, vaya al Quota Center. Busque la cuota llamada
polardb_mysql_iac_56y haga clic en Request en la columna Actions. -
PolarDB for MySQL 5.7 con la revisión 5.7.1.0.6 o posterior.
NotaDebe habilitar el parámetro loose_innodb_support_instant_add_column antes de usar esta función en clústeres de PolarDB for MySQL 5.7.
-
PolarDB for MySQL 8.0.
NotaLos clústeres de PolarDB for MySQL 8.0 admiten la adición instantánea de columnas de forma predeterminada. No se requiere ninguna configuración de parámetros.
Consulte el número de revisión de su clúster. Para obtener más información, consulte checking the version number.
Límites
Solo puede agregar una columna como la última de la tabla.
-
Agregar una columna virtual:
PolarDB for MySQL 5.6 y 5.7: no compatible.
PolarDB for MySQL 8.0: compatible.
-
Agregar campos a tablas particionadas en segundos.
PolarDB for MySQL 5.6: no compatible.
-
PolarDB for MySQL 5.7 y 8.0: compatible.
NotaLa función de adición instantánea de columnas para tablas particionadas en PolarDB for MySQL 5.7 se encuentra en versión canary. Para usarla, vaya al Quota Center. Busque la cuota llamada
polarM_57_iac_on_partition_tabley haga clic en Request en la columna Actions.
No se admiten índices de texto completo en las tablas.
No se admiten tablas con ROW_FORMAT configurado como COMPRESSED.
-
Puede agregar columnas de forma instantánea a tablas que tienen In-Memory Column Indexes (IMCI), siempre que se cumplan estas condiciones:
Para PolarDB for MySQL 8.0.1.1.42 y anteriores, o 8.0.2.2.23 y anteriores: establezca el parámetro
imci_enable_add_column_instant_ddlenON. Al habilitarlo, la adición instantánea de columnas activa una reconstrucción silenciosa del IMCI en segundo plano. Durante este proceso, el IMCI no está disponible.Para PolarDB for MySQL 8.0.1.1.42 y posteriores, o 8.0.2.2.23 y posteriores: establezca el parámetro
imci_enable_add_column_instant_ddlenOFF.
Las tablas que tienen habilitada la opción
implicit_primary_keyrequieren una clave primaria personalizada.No puede combinar la adición instantánea de columnas con otras operaciones DDL, como agregar un índice, en la misma instrucción SQL.
Cómo usarla
Configuración de parámetros
-
**Clústeres de PolarDB for MySQL** 5.6 y 5.7: habilite el parámetro loose_innodb_support_instant_add_column para usar la adición instantánea de columnas. Consulte las instrucciones en Enable a parameter.
Parámetro
Nivel
Descripción
loose_innodb_support_instant_add_column
Global
Habilita o deshabilita la adición instantánea de columnas. Valores válidos:
ON: habilita la adición instantánea de columnas.
OFF (predeterminado): deshabilita la adición instantánea de columnas.
**Clústeres de PolarDB for MySQL** 8.0: puede usar la adición instantánea de columnas sin configurar ningún parámetro.
Sintaxis
-
Fuerce la adición instantánea de columnas si especifica
ALGORITHM=INSTANT. Ejemplo:ALTER TABLE <table_name> ADD COLUMN <column_name> int, ALGORITHM=INSTANT;NotaSi esta instrucción devuelve
ERROR 0A000: ALGORITHM=INSTANT is not supported for this operation. Try ALGORITHM=COPY/INPLACE., la adición instantánea de columnas no es compatible con esta operación. Compruebe si el parámetro loose_innodb_support_instant_add_column está habilitado y revise Limits. -
Omita la cláusula
ALGORITHMo especifiqueALGORITHM=DEFAULT. PolarDB selecciona automáticamente el algoritmo más rápido. Ejemplos:ALTER TABLE <table_name> ADD COLUMN <column_name> int, ALGORITHM=DEFAULT; ALTER TABLE <table_name> ADD COLUMN <column_name> int;NotaPolarDB elige los algoritmos en este orden: INSTANT > INPLACE > COPY.
Consulta de la información de columnas agregadas con el algoritmo INSTANT
-
**Clústeres de PolarDB for MySQL** 5.6 y 5.7: aparece una nueva tabla llamada
INNODB_SYS_INSTANT_COLUMNSen la base de datosINFORMATION_SCHEMA. Esta tabla almacena detalles sobre las columnas agregadas con el algoritmo INSTANT, como nombres de columna, números ordinales y valores predeterminados (almacenados en formato binario). Ejecute esta instrucción para consultar los detalles:SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_INSTANT_COLUMNS;NotaSi usa el algoritmo
INSTANTpara agregar columnas a la tabla de destino y luego ejecuta operaciones DDL que desencadenan la reconstrucción de la tabla (comoOPTIMIZE TABLE), la tabla se reconstruye físicamente. Durante este proceso, las columnasINSTANToriginales se convierten automáticamente en columnas normales, y sus datos se conservan por completo en la nueva tabla. Como estas columnas ya no admiten el algoritmoINSTANT, se eliminan los registros correspondientes de la tabla del sistemaINNODB_SYS_INSTANT_COLUMNS. -
**Clústeres de PolarDB for MySQL** 8.0: ejecute esta instrucción para consultar los detalles de las columnas. Si la columna
has_defaultmuestra 1, significa que la columna se agregó con el algoritmo INSTANT.SELECT * FROM INFORMATION_SCHEMA.INNODB_COLUMNS WHERE TABLE_ID = (SELECT TABLE_ID FROM INFORMATION_SCHEMA.INNODB_TABLES WHERE NAME = "<database_name>/<table_name>");
Contáctenos
Si tiene dudas sobre las operaciones DDL, Contact us.