MySQL - Diferença entre MyISAM e InnoDB
Autor: Elder Stroparo | Publicado: 2014-11-02T06:25:00-08:00



Hoje vamos falar um pouco desta diferença entre MyISAM e InnoDB.

Bom o MySQL&nbsp;é um banco de dados relacional bem divulgado pois ele tem uma excelente&nbsp;parceria&nbsp;da linguagem web PHP (Mysql + PHP) vem dando certo há anos (não é difícil encontrar uma empresa de&nbsp;hospedagem de sites que deixe de citar PHP e MySQL). Conforme voltando a ao MySQL encontramos neste banco relacional 2&nbsp;performance&nbsp;de Engines mais utilizadas do Mysql que são &nbsp;InnoDB e MyISAM.





Então vamos detalhar estas diferenças!



InnoDB funciona mais rápido que MyISAM quando há modificações constantes nos dados, uma vez que este tipo de armazenagem usa a proteção por registros (row locking) e não a proteção por tabelas (table locking) como o faz o MyISAM. Contudo, em várias situações, InnoDB é mais lento que MyISAM, devido ao fato de que InnoDB funciona com transações. A armazenagem padrão do MySQL é MyISAM. Outro ponto interessante são as restrições de chaves estrangeiras (foreign key constraints) e transações. Estes recursos estão disponíveis apenas no InnoDB.



MyISAM é apropriado para tabelas cujos dados não mudam com frequência. Um exemplo disso é uma tabela de cidades e estados. Como geralmente este tipo de tabela é usado apenas como consultas, não há a necessidade do uso de InnoDB. MyISAM&nbsp;tem a vantagem de ser arquivos simples se comparado com o innodb, mesmo na opção para criar dentro do contexto, o arquivo fica instavel em volumes grandes, o mito sobre configurar o&nbsp;mysql&nbsp;em innodb está errado, VOCÊ SEMPRE DEVE CONFIGURAR O MYSQL, perfomace de cache é sempre importante.



InnoDB, Quais as vantagens?

– Turbinadíssimo quando o assunto são tabelas que contém registros que sofrem mudanças o tempo todo, pois o InnoDB opera como&nbsp;row locking, isto quer dizer que se você tem uma tabela que contém registros que sofrem mudanças o tempo todo você será favorecido. Imagine uma coluna de tabela que mostra o valor em real da cotação do dólar? Entendeu? Ocorrem inúmeras mudanças no decorrer do dia, isto irá favorecer e muito sua vida caso use o InnoDB.



– Consistência de dados, este é um dos pontos mais fortes do InnoDB. A chance de uma tabela que usa engine InnoDB corromper é mais que mínima, é hiper remota! Se você quer garantia de dados use InnoDB. Caso tenha dúvidas de como mudar sua engine de MyIsam para InnoDB basta exportar sua base de dados (que usa Engine MyIsam) e com um editor de textos (pode ser o bloco de notas) use a opção de substituir um termo e informe a referência MyIsam e o termo substituto será InnoDB, após basta importar no seu banco de dados que já estará usando InnoDB como Engine padrão do seu BD.



– Suporte a transações e relacionamentos completos, isto é, em caso simples, você tem o recurso de chaves estrangeiras.

–&nbsp;Rodam sob um engine, desenvolvido pelo Innobase( www.innodb.com), que acrescenta ao MySQL o suporte a TRANSAÇÕES e a CONSTRAINTS de chave estrangeira.

–&nbsp;Para obter o máximo de performance com tabelas InnoDB é necessário configurar o arquivo my.conf(ou my.ini no Windows) de acordo com as características de hardware do servidor onde o MySQL está rodando. Os Detalhes dessa configuração podem ser obtidos no manual do InnoDB.






InnoDB, Qual desvantagem?



– Em caso de uso de tabelas que mal sofrem mudanças o desempenho ficará comprometido.



– Em caso de um crash (raro, porém possível de ocorrer), por exemplo, um disco que apresentou mau funcionamento e depois apresentou estabilidade, porém corrompeu o BD, a chance de restore mais simples é justamente um restore de um dump (backup anteriormente feito).&nbsp;



MyIsam, Quais Vantagens?



– Desempenho muito satisfatório em tabelas que não recebem muitas alterações constantes, pois o MyIsam opera com&nbsp;table locking, em um exemplo mais simples, imagine uma tabela de sorteios por CPF (de maneira aleatória), raramente um CPF irá mudar (desde que tenha sido inserido errado), logo esta tabela de promoção raramente sofrerá alterações.



– Capacidade de restore muito agradável (baseado no log binário), raramente será necessário o uso de dumps para um restore crítico.

–&nbsp;Foi implementado a partir do código da tabela ISAM., introduzindo diversas melhorias como:

–&nbsp;Os arquivos de tabela são transportáveis entre diferentes sistemas operacionais;

–&nbsp;Campos BLOB&nbsp;&nbsp;e TEXT&nbsp;&nbsp;podem ser indexados;

–&nbsp;Os Arquivos índices e de dados podem ser armazenados em dispositivos diferentes (aumento de performance);

–&nbsp;Algoritmos de distribuição de dados e gerenciamento de índices melhorados;



MyIsam, Qual desvantagem?



– O ponto negativo que destacamos é justamente a estabilidade dos arquivos. Em um caso de travamento do sistema (imagine um ataque na porta 80 do apache) e o servidor precisou de um reboot emergencial, a probabilidade do banco sob engine MyIsam corromper é enorme. Por isso recomendamos fortemente o uso do InnoDB.


Esperamos que este simplíssimo artigo tenha tirado sua dúvida sobre as engines MyIsam e InnoDB para o uso do dia a dia.




Bom é isto ai espero que tenham gostado. Em breve irei postar mais acompanhem!!!