Adicione uma coluna a uma tabela de qualquer tamanho em segundos, independentemente do volume de dados.
O PolarDB for MySQL usa o algoritmo INSTANT para essa operação DDL. Ele modifica apenas os metadados no dicionário de dados, sem alterar ou copiar dados históricos e sem reconstruir a tabela.
Versões compatíveis
|
Versão |
Revisão mínima |
Observações |
|
PolarDB for MySQL 8.0 |
Qualquer |
Ativado por padrão. Nenhuma configuração necessária. |
|
PolarDB for MySQL 5.7 |
5.7.1.0.6 |
Ative o parâmetro |
|
PolarDB for MySQL 5.6 |
5.6.1.0.43 |
Disponível em versão canary. Solicite acesso pelo Quota Center usando a cota |
Para verificar o número de revisão do seu cluster, consulte Verificar o número da versão.
Limitações
|
Limitação |
Detalhes |
|
Posição da coluna |
A nova coluna deve ser a última da tabela. |
|
Colunas virtuais |
Compatível com a versão 8.0. Incompatível com as versões 5.6 e 5.7. |
|
Tabelas particionadas |
Incompatível com a versão 5.6. Compatível com as versões 5.7 e 8.0. Na versão 5.7, este recurso está em versão canary. Solicite acesso pelo Quota Center usando a cota |
|
Índices de texto completo |
Tabelas com índices de texto completo não são compatíveis. |
|
Tabelas compactadas |
Tabelas com |
|
Tabelas com In-Memory Column Indexes (IMCI) |
Nas versões 8.0.1.1.42 e anteriores, ou 8.0.2.2.23 e anteriores: defina |
|
Tabelas com chaves primárias implícitas |
Tabelas com |
|
Instruções DDL combinadas |
Não é possível combinar a adição instantânea de coluna com outras operações DDL (como adicionar um índice) na mesma instrução |
Pré-requisitos
Antes de começar, verifique se você tem:
Um cluster PolarDB for MySQL executando uma versão compatível
Para PolarDB for MySQL 5.6: acesso à cota via Quota Center
Para PolarDB for MySQL 5.7: o parâmetro
loose_innodb_support_instant_add_columndefinido comoON
Ativar a adição instantânea de coluna (apenas 5.6 e 5.7)
Clusters PolarDB for MySQL 8.0 oferecem suporte à adição instantânea de coluna por padrão. Para clusters 5.6 e 5.7, ative o seguinte parâmetro:
|
Parâmetro |
Nível |
Descrição |
|
|
Global |
Ativa ou desativa a adição instantânea de coluna. Valores válidos: |
Para obter instruções sobre como definir parâmetros, consulte Ativar um parâmetro.
Adicionar uma coluna instantaneamente
Forçar o algoritmo INSTANT
Especifique ALGORITHM=INSTANT para garantir que a operação use o algoritmo INSTANT:
ALTER TABLE <table_name> ADD COLUMN <column_name> int, ALGORITHM=INSTANT;
Se o cluster ou a tabela não oferecer suporte à adição instantânea de coluna, a instrução retornará:
ERROR 0A000: ALGORITHM=INSTANT is not supported for this operation. Try ALGORITHM=COPY/INPLACE.
Caso encontre esse erro, verifique se loose_innodb_support_instant_add_column está ativado e revise as Limitações.
Permitir que o PolarDB selecione o algoritmo automaticamente
Omita a cláusula ALGORITHM ou especifique ALGORITHM=DEFAULT para permitir que o PolarDB selecione o algoritmo mais rápido disponível. O PolarDB avalia os algoritmos nesta ordem: INSTANT > INPLACE > COPY.
ALTER TABLE <table_name> ADD COLUMN <column_name> int, ALGORITHM=DEFAULT;
ALTER TABLE <table_name> ADD COLUMN <column_name> int;
Verificar se o algoritmo INSTANT foi usado
PolarDB for MySQL 5.6 e 5.7
Consulte a tabela INNODB_SYS_INSTANT_COLUMNS em INFORMATION_SCHEMA. Essa tabela armazena nomes de colunas, posições ordinais e valores padrão (em formato binário) para colunas adicionadas com o algoritmo INSTANT:
SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_INSTANT_COLUMNS;
Se você executar posteriormente uma operação DDL que acione a reconstrução da tabela (como OPTIMIZE TABLE), o PolarDB reconstruirá fisicamente a tabela. As colunas INSTANT serão convertidas em colunas regulares e seus dados serão totalmente preservados. Os registros correspondentes serão removidos de INNODB_SYS_INSTANT_COLUMNS.
PolarDB for MySQL 8.0
Consulte INFORMATION_SCHEMA.INNODB_COLUMNS e verifique a coluna has_default. Um valor de 1 indica que a coluna foi adicionada com o 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>"
);
Próximos passos
Suporte a DDL no PolarDB for MySQL — referência completa dos algoritmos DDL compatíveis com o PolarDB for MySQL
Em caso de dúvidas sobre operações DDL, entre em contato com o suporte técnico
Fale conosco
Se tiver alguma dúvida sobre operações DDL, entre em contato com o suporte técnico.