Sim, há casos em que você pode especificar COPY
, mas seria por outros motivos que não o desempenho.
É importante entender que o MySQL introduziu um novo recurso - o processamento de DLL online na versão 5.6. Não removeu o processamento offline. Portanto, é necessário diferenciar entre esses dois modos:
Algumas operações ainda funcionam apenas no modo offline. Consulte a Tabela 15.10, “ Resumo do status on-line para operações DDL ” para obter uma lista das operações DDL que podem ou não ser executadas no local.
As operações nos modos Online e Offline têm um comportamento ligeiramente diferente, portanto você pode escolher o "antigo" por motivos de compatibilidade.
Alguns exemplos (sugira mais):
As tabelas InnoDB criadas antes do MySQL 5.6 não suportam ALTER TABLE ... ALGORITHM=INPLACE
tabelas que incluem colunas temporais ( DATE
, DATETIME
ou TIMESTAMP
) e não foram reconstruídas usando ALTER TABLE ... ALGORITHM=COPY
. Nesse caso, uma ALTER TABLE ... ALGORITHM=INPLACE
operação retorna erro.
ADD PRIMARY KEY
A cláusula in COPY mode
converte silenciosamente NULL
em valores padrão para esse tipo de dados (0 para INT, sequência vazia para varchar), enquanto IN_PLACE
que não faz isso.
Com a cláusula ALGORITHM = COPY, a operação é bem-sucedida, apesar da presença de valores NULL nas colunas da chave primária; os dados são alterados silenciosamente, o que pode causar problemas.
Outro motivo para preferir COPY
:
Operações para as quais você especifica ALGORITHM = COPY ou old_alter_table = 1, para forçar o comportamento de cópia da tabela, se necessário, para uma compatibilidade com versões anteriores precisa em cenários especializados.
Embora o manual do MySQL não fale sobre cenários reais, você pode imaginar alguns. Por exemplo, o desenvolvedor contou com o bloqueio da tabela durante a ALTER INDEX
operação, para que a tabela seja somente leitura ou totalmente bloqueada e haja um processo que leia a tabela estática durante a reconstrução do índice.