Estou trabalhando com um aplicativo Rails apoiado por um banco de dados MySQL. Um dos modelos usados com mais frequência é apoiado por uma tabela com mais de 200.000.000 de linhas (e crescendo). Há algum tempo, sabemos que a configuração não é escalável.
O recurso em que estou trabalhando no momento exige que eu adicione algumas novas colunas a essa tabela, bem como um índice composto. Meu colega de trabalho fez um teste em sua máquina de desenvolvimento local e demorou cerca de uma hora por coluna (nem sequer testei a adição do índice ainda).
Estamos pensando em adotar uma abordagem diferente, construir uma nova tabela com as colunas necessárias, despejar os dados da tabela antiga na nova e, em vez disso, apontar o modelo Rails para a nova tabela. Parece uma solução de curto prazo para um grande problema iminente, mas estou curioso para saber se alguém tem uma ideia de como lidar com esse problema.
Também falamos sobre o arquivamento dos registros antigos da tabela. É uma tabela que é muito escrita e lida, mas apenas com registros recentes (o aplicativo provavelmente nunca precisa fazer nada com registros com mais de um mês).
ALTER TABLE table1 ADD col1 INT, ADD col2 CHAR(2), ADD INDEX (col1, col5);
. Mais sobre ALTER