Um pouco atrasado para o jogo ... mas aqui está um post muito abrangente que escrevi há alguns meses , detalhando as principais diferenças entre o MYISAM e o InnoDB. Pegue uma xícara de chá (e talvez um biscoito) e aproveite.
A principal diferença entre o MyISAM e o InnoDB está na integridade referencial e nas transações. Há também outras diferenças, como bloqueio, reversões e pesquisas de texto completo.
Integridade referencial
A integridade referencial garante que os relacionamentos entre as tabelas permaneçam consistentes. Mais especificamente, isso significa que quando uma tabela (por exemplo, Listings) tem uma chave estrangeira (por exemplo, Product ID) apontando para uma tabela diferente (por exemplo Products), quando atualizações ou exclusões ocorrem na tabela apontada, essas alterações são em cascata para o link mesa. Em nosso exemplo, se um produto for renomeado, as chaves externas da tabela de vinculação também serão atualizadas. Se um produto for excluído da tabela "Produtos", todas as listagens que apontarem para a entrada excluída também serão excluídas. Além disso, qualquer nova listagem deve ter essa chave estrangeira apontando para uma entrada existente válida.
O InnoDB é um DBMS relacional (RDBMS) e, portanto, tem integridade referencial, enquanto o MyISAM não.
Transações e amp; Atomicidade
Os dados em uma tabela são gerenciados usando instruções DML (Data Manipulation Language), como SELECT, INSERT, UPDATE e DELETE. Um grupo de transações duas ou mais instruções DML juntas em uma única unidade de trabalho, portanto, a unidade inteira é aplicada ou nenhuma delas é.
MyISAM não suporta transações enquanto o InnoDB faz.
Se uma operação for interrompida durante o uso de uma tabela MyISAM, a operação será abortada imediatamente e as linhas (ou até mesmo os dados dentro de cada linha) afetadas permanecerão afetadas, mesmo se a operação não foi concluída.
Se uma operação for interrompida durante o uso de uma tabela InnoDB, porque ela usa transações, que possuem atomicidade, qualquer transação que não foi concluída não terá efeito, já que nenhuma confirmação é feita.
Bloqueio de tabela vs Bloqueio de linha
Quando uma consulta é executada em uma tabela MyISAM, toda a tabela em que está consultando será bloqueada. Isso significa que as consultas subseqüentes serão executadas somente após o término da atual. Se você estiver lendo uma tabela grande e / ou houver operações frequentes de leitura e gravação, isso pode significar um enorme acúmulo de consultas.
Quando uma consulta é executada em uma tabela InnoDB, apenas as linhas envolvidas estão bloqueadas, o resto da tabela permanece disponível para as operações CRUD. Isso significa que as consultas podem ser executadas simultaneamente na mesma tabela, desde que não usem a mesma linha.
Esse recurso no InnoDB é conhecido como simultaneidade. Por maior que seja a simultaneidade, há uma grande desvantagem que se aplica a um intervalo selecionado de tabelas, em que há uma sobrecarga na alternância entre encadeamentos do kernel e você deve definir um limite nos encadeamentos do kernel para evitar que o servidor pare. .
Transações e amp; Reversões
Quando você executa uma operação no MyISAM, as alterações são definidas; no InnoDB, essas mudanças podem ser revertidas. Os comandos mais comuns usados para controlar transações são COMMIT, ROLLBACK e SAVEPOINT. 1. COMMIT - você pode escrever múltiplas operações DML, mas as mudanças só serão salvas quando um COMMIT for feito 2. ROLLBACK - você pode descartar qualquer operação que ainda não tenha sido confirmada ainda 3. SAVEPOINT - define um ponto na lista de operações para as quais uma operação ROLLBACK pode reverter para
Confiabilidade
MyISAM não oferece integridade de dados - Falhas de hardware, desligamentos não limpos e operações canceladas podem corromper os dados. Isso exigiria reparos completos ou recriações dos índices e tabelas.
O InnoDB, por outro lado, usa um log transacional, um buffer de gravação dupla e soma de verificação e validação automáticas para evitar danos. Antes do InnoDB fazer quaisquer alterações, ele registra os dados antes das transações em um arquivo de espaço de tabela do sistema chamado ibdata1. Se houver uma falha, o InnoDB poderá recuperar automaticamente a reprodução desses registros.
Indexação FULLTEXT
O InnoDB não suporta a indexação FULLTEXT até a versão 5.6.4 do MySQL. No momento em que escrevo este post, a versão MySQL de muitos provedores de hospedagem compartilhada ainda está abaixo de 5.6.4, o que significa que a indexação FULLTEXT não é suportada por tabelas InnoDB.
No entanto, este não é um motivo válido para usar o MyISAM. É melhor mudar para um provedor de hospedagem que ofereça suporte a versões atualizadas do MySQL. Não que uma tabela MyISAM que use indexação FULLTEXT não possa ser convertida em uma tabela InnoDB.
Conclusão
Em conclusão, o InnoDB deve ser seu mecanismo de armazenamento padrão escolhido. Escolha MyISAM ou outros tipos de dados quando eles atendem a uma necessidade específica.