:: DEVELOPER ZONE
O InnoDB não tem uma otimização especial para criação de índices separados.
Assim não há custo para exportar e importar a tabela e criar índices
posteriormente.
O modo mais rápido de se alterar uma tabela para InnoDB é fazer as inserções
diretamente em uma tabela InnoDB, isto é, use ALTER TABLE ... TYPE=INNODB,
ou crie uma tabela InnoDB vazia com definições idênticas e insira os registro
com INSERT INTO ... SELECT * FROM ....
Para obter um melhor controle sobre o processo de inserção, pode ser bom inserir grandes tabelas em pedaços:
INSERT INTO newtable SELECT * FROM oldtable WHERE yourkey > something AND yourkey <= somethingelse;
Depois de todos os dados serem inseridos você pode renomear as tabelas.
Durante a canversão de tabelas grandes você deve configurar á área de buffer com um tamanho grande para reduzir a E/S de disco. Não deve ser maior que 80% da memória física. Você deve configurar o arquivo de log do InnoDB grande, assim como o buffer de log.
Certifique-se de que você não irá ocupar todo o tablespace: tabelas
InnoDB gasta muito mais espaço que tabelas MyISAM. Se um ALTER TABLE
ficar sem espaço, ele irá iniciar um rollback, que pode levar horas se
ele estiver no limite de disco.
Para inserções, o InnoDB utiliza o buffer de inserção para fundir registros
de índices secundários a índices em grupos. Isto economiza muito a E/S de
disco. No rollback tal mecanismo não é usado e o rollback pode demorar 30
vezes mais que a inserção.
No caso de um rollback demorado, se você não tiver dados valiosos e seu
banco de dados, é melhor que você mate o processo de banco de dados,
delete todos os arquivos de dados e de log do InnoDB e todos os arquivos
de tabela .frm e inicie o seu trabalho de novo, do que esperar
que milhões de E/Ss de disoc de complete.
© 1995-2005 MySQL AB. All rights reserved.
