Eu tenho uma tabela com cerca de 30 milhões de linhas no MySQL 5.5 usando o mecanismo de armazenamento InnoDB. Esta tabela possui uma chave estrangeira que se vincula a outra tabela com cerca de 3 milhões de linhas.
Quero adicionar uma chave primária à tabela maior, mas não tenho certeza da melhor maneira de fazer isso. Não há coluna (ou conjunto de colunas) existente que eu possa usar para isso; então, como devo proceder?
Eu vi algumas referências a um ID de registro interno do InnoDB, mas não encontrei se ele estiver acessível.
Caso contrário, talvez eu precise despejar e recarregar os dados, adicionando o ID manualmente.
Obrigado.
mysql
innodb
primary-key
Wodin
fonte
fonte
Respostas:
esse pode ser o caminho errado, mas ..
você não pode simplesmente alterar a estrutura da tabela,
adicione uma coluna de chave primária à tabela
então...
escreva um script rápido para percorrer a tabela inteira
adicionando um valor de incremento automático à nova coluna?
fonte
ALTER TABLE blah ADD id INT NOT NULL AUTO_INCREMENT PRIMARY KEY;
e levou 2 horas e 18 minutos :) Eu não tentei escrever para a mesa durante esse tempo, mas as leituras funcionaram bem.Aqui está como eu abordaria isso:
* Nota: Se a tabela de origem for InnoDB, as restrições de chave estrangeira serão mantidas e sobreviverão à renomeação. Então você terá que fazer uma alteração para remediar isso.
fonte