<p>Uma dúvida que surgiu em nosso fórum era sobre como alterar o tipo de tabela InnoDB para MyISAM, ou vice-versa. Bom aparentemente não estamos questionando o porque de modificar o tipo da tabela. Cada desenvolvedor deve saber qual o melhor formato a utilizar em sua aplicação. Nós temos um artigo falando sobre <a href="../artigo/789/mysql_-_diferenca_entre_innodb_e_myisam" target="_blank">as diferenças entre InnoDB e MyISAM</a>, quais os benefícios de cada uma e quais vantagens também.</p> <p>Eu particularmente prefiro utilizar MyISAM pois acredito que seja mais rápido, como pouco uso chave estrangeira aplicada de fato a tabela. Nas minhas aplicações eu faço o controle de registros em tabelas externas em código e não no banco de dados, assim posso utilizar os benefícios da performance do MyISAM.</p> <p>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 é, usando o <strong>ALTER TABLE ... ENGINE=INNODB</strong>, ou então você pode criar uma tabela InnoDB vazia com definições idênticas e insirir os registro com <strong>INSERT INTO ... SELECT * FROM ...</strong></p> <p>Depois de todos os dados serem inseridos você pode renomear as tabelas. Durante a conversão de tabelas grandes você deve configurar <strong>á área de buffer com um tamanho grande</strong> para <strong>reduzir a E/S de disco</strong>. Não deve ser maior que <strong>80% da memória física</strong>.</p> <h2>Como alterar os tipos de tabela com linha de comando</h2> <p>Criamos uma tabela chamada teste dentro do banco de dados teste. Já devidamente logado com usuário root.</p> <pre><code>CREATE TABLE `teste`.`teste` ( `id` INT( 11 ) NOT NULL , `titulo` VARCHAR( 200 ) NOT NULL , PRIMARY KEY ( `id` ) ) ENGINE = MYISAM ;</code></pre> <p><strong>Para alterar a tabela teste para InnoDB execute o seguinte comando:</strong></p> <pre><code>ALTER TABLE `teste` ENGINE = InnoDB</code></pre> <p><span style="font-weight: bold;">Para fazer o contrário, transformar InnoDB para MyISAM execute o seguinte comando:</span></p> <pre><code>ALTER TABLE `teste` ENGINE = MYISAM</code></pre> <h2>Como alterar então os tipos usando o phpMyAdmin:</h2> <p>No phpMyAdmin, crie uma tabela chamada teste, com os campos id INT(11) e titulo VARCHAR(200), conforme figura abaixo:</p> <blockquote> <div style="text-align: center;"><img src="https://www.oficinadanet.com.br/imagens/coluna/3369/img1.png" alt="http://www.oficinadanet.com.br//imagens/coluna/3369//img1.png" /></div> </blockquote> <p>Defina o nome da tabela teste e clique em executar. Após isto aparecerá uma tela pedindo para colocar os campos, conforme tela abaixo:</p> <blockquote> <div style="text-align: center;"><img src="https://www.oficinadanet.com.br/imagens/coluna/3369/img2.png" alt="http://www.oficinadanet.com.br//imagens/coluna/3369//img2.png" /></div> </blockquote> <p>Defina o nome dos campos id INT(11) e faça ele como chave primária, e outro campo chamado titulo VARCHAR(200). Você pode definir o tipo da tabela, no caso escolhi MyISAM. E depois clique em executar.</p> <p>Feito isto, acesse a tabela <strong>teste</strong>, na barra lateral esquerda, e então clique na aba <strong>operações</strong>, vai ter uma caixa chamada <strong>Opções da tabela</strong>, tem um campo chamado <strong>Storage Engine</strong>, basta escolher o tipo que quiser para alterar e apertar o botão executar, conforme a figura abaixo:</p> <blockquote> <div style="text-align: center;"><img src="https://www.oficinadanet.com.br/imagens/coluna/3369/img3.png" alt="http://www.oficinadanet.com.br//imagens/coluna/3369//img3.png" /></div> </blockquote> <p> </p> <blockquote><strong>Atenção:</strong> 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.</blockquote> <p><br /> Qualquer dúvida pergunte no formulário abaixo ;)</p>