MySQL: Como converter InnoDB para MyISAM

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.

Por | @nmuller99 Programação
<p>Uma d&uacute;vida que surgiu em nosso f&oacute;rum era sobre como alterar o tipo de tabela InnoDB para MyISAM, ou vice-versa. Bom aparentemente n&atilde;o estamos questionando o porque de modificar o tipo da tabela. Cada desenvolvedor deve saber qual o melhor formato a utilizar em sua aplica&ccedil;&atilde;o. N&oacute;s temos um artigo falando sobre <a href="../artigo/789/mysql_-_diferenca_entre_innodb_e_myisam" target="_blank">as diferen&ccedil;as entre InnoDB e MyISAM</a>, quais os benef&iacute;cios de cada uma e quais vantagens tamb&eacute;m.</p> <p>Eu particularmente prefiro utilizar MyISAM pois acredito que seja mais r&aacute;pido, como pouco uso chave estrangeira aplicada de fato a tabela. Nas minhas aplica&ccedil;&otilde;es eu fa&ccedil;o o controle de registros em tabelas externas em c&oacute;digo e n&atilde;o no banco de dados, assim posso utilizar os benef&iacute;cios da performance do MyISAM.</p> <p>O InnoDB n&atilde;o tem uma otimiza&ccedil;&atilde;o especial para cria&ccedil;&atilde;o de &iacute;ndices separados. Assim n&atilde;o h&aacute; custo para exportar e importar a tabela e criar &iacute;ndices posteriormente. O modo mais r&aacute;pido de se alterar uma tabela para InnoDB &eacute; fazer as inser&ccedil;&otilde;es diretamente em uma tabela InnoDB, isto &eacute;, usando o <strong>ALTER TABLE ... ENGINE=INNODB</strong>, ou ent&atilde;o voc&ecirc; pode criar uma tabela InnoDB vazia com defini&ccedil;&otilde;es id&ecirc;nticas e insirir os registro com <strong>INSERT INTO ... SELECT * FROM ...</strong></p> <p>Depois de todos os dados serem inseridos voc&ecirc; pode renomear as tabelas. Durante a convers&atilde;o de tabelas grandes voc&ecirc; deve configurar <strong>&aacute; &aacute;rea de buffer com um tamanho grande</strong> para <strong>reduzir a E/S de disco</strong>. N&atilde;o deve ser maior que <strong>80% da mem&oacute;ria f&iacute;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&aacute; devidamente logado com usu&aacute;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&aacute;rio, transformar InnoDB para MyISAM execute o seguinte comando:</span></p> <pre><code>ALTER TABLE `teste` ENGINE = MYISAM</code></pre> <h2>Como alterar ent&atilde;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&oacute;s isto aparecer&aacute; 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&ccedil;a ele como chave prim&aacute;ria, e outro campo chamado titulo VARCHAR(200). Voc&ecirc; 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&atilde;o clique na aba <strong>opera&ccedil;&otilde;es</strong>, vai ter uma caixa chamada <strong>Op&ccedil;&otilde;es da tabela</strong>, tem um campo chamado <strong>Storage Engine</strong>, basta escolher o tipo que quiser para alterar e apertar o bot&atilde;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>&nbsp;</p> <blockquote><strong>Aten&ccedil;&atilde;o:</strong> Certifique-se de que voc&ecirc; n&atilde;o ir&aacute; ocupar todo o tablespace: tabelas InnoDB gasta muito mais espa&ccedil;o que tabelas MyISAM. Se um ALTER TABLE ficar sem espa&ccedil;o, ele ir&aacute; iniciar um rollback, que pode levar horas se ele estiver no limite de disco. Para inser&ccedil;&otilde;es, o InnoDB utiliza o buffer de inser&ccedil;&atilde;o para fundir registros de &iacute;ndices secund&aacute;rios a &iacute;ndices em grupos. Isto economiza muito a E/S de disco.</blockquote> <p><br /> Qualquer d&uacute;vida pergunte no formul&aacute;rio abaixo ;)</p>

Mais sobre: mysql myisam innodb
Share Tweet
Recomendado
Comentários
Carregar comentários
Destaquesver tudo