Diferença entre innodb e myisam

Há muita discussão sobre isso on-line, mas grande parte é datada, então vou em frente e faço minhas próprias:

  • Transações ACID: InnoDB sim, MyISAM não.
  • Simultaneidade: O InnoDB suporta um nível bastante profundo de simultaneidade, enquanto o MyISAM é gravador único com vários leitores.
  • Bloqueio: InnoDB: no nível da linha. MyISAM, no nível da tabela.
  • Recuperação de falha: o sistema de transações do InnoDB garante a recuperação de transações COMMITted e gravadas após uma falha. MyISAM: um tanto imprevisível e confuso.
  • Buffer pool: InnoDB: índices e dados da tabela base gerenciados internamente pelo gerenciador de armazenamento. MyISAM: os índices são gerenciados pelo gerenciador de armazenamento, enquanto os dados da tabela base são apenas arquivos de disco. Isso tem implicações de desempenho bastante grandes - geralmente a favor do InnoDB.
  • Chave Primária: O InnoDB é organizado por índice, o que significa que sua estrutura de tabela base é efetivamente um índice primário organizado em torno da chave primária da tabela. O MyISAM usa um índice secundário para implementar chaves primárias, o que significa que o acesso a elas é mais lento.
  • Nas versões mais recentes do MySQL, recursos como índices de texto completo são suportados nos dois mecanismos de armazenamento.
  • As versões anteriores do InnoDB costumavam ser mais lentas que o MyISAM, mas hoje em dia o InnoDB é muito mais rápido em geral.

Intangivel:

  • O InnoDB está sendo mantido e aprimorado ativamente, enquanto o MyISAM tem pouco ou nenhum novo desenvolvimento.
  • O InnoDB é o mecanismo de armazenamento padrão do MySQL há cerca de nove anos (desde 5.5. )

A única vez que eu usaria o MyISAM hoje em dia é se eu tivesse uma tabela temporária ou de trabalho que não coubesse na RAM. O InnoDB seria a escolha se você realmente precisar manter seus dados.