Qual a diferença entre MyISAM e InnoDB?

Eu entendo que esta pergunta foi feita antes, mas a maior parte do tempo é feita em relação a uma base de dados ou tabela específica. Não consigo encontrar uma resposta neste site que descreva os dois mecanismos e suas diferenças sem relação com o database específico de alguém.

Eu quero ser capaz de tomar decisões mais informadas no futuro com relação ao design de uma tabela ou database, então estou procurando uma resposta abrangente sobre as diferenças entre os dois mecanismos de armazenamento.

Qual é a diferença entre MyISAM e InnoDB , e o que devo procurar ao tentar decidir entre um ou outro?

As principais diferenças entre InnoDB e MyISAM (“no que diz respeito à criação de uma tabela ou database” sobre o qual você perguntou) são suporte para “integridade referencial” e “transactions”.

Se você precisar do database para impor restrições de chave estrangeira, ou se precisar do database para suportar transactions (ou seja, alterações feitas por duas ou mais operações DML tratadas como uma única unidade de trabalho, com todas as alterações aplicadas ou todas as alterações revertidas) então você escolheria o mecanismo InnoDB, já que esses resources estão ausentes do mecanismo MyISAM.

Essas são as duas maiores diferenças. Outra grande diferença é a simultaneidade. Com o MyISAM, uma instrução DML obterá um bloqueio exclusivo na tabela e, enquanto esse bloqueio for mantido, nenhuma outra session poderá executar uma operação SELECT ou DML na tabela.

Esses dois mecanismos específicos sobre os quais você perguntou (InnoDB e MyISAM) têm diferentes objectives de design. O MySQL também possui outros mecanismos de armazenamento, com seus próprios objectives de design.

Então, ao escolher entre InnoDB e MyISAM, o primeiro passo é determinar se você precisa dos resources fornecidos pelo InnoDB. Se não, então o MyISAM está pronto para consideração.

Uma discussão mais detalhada das diferenças é bastante impraticável (neste fórum) sem uma discussão mais detalhada do espaço do problema … como o aplicativo usará o database, quantas tabelas, tamanho das tabelas, a carga da transação, volumes de seleção , inserir, atualizações, requisitos de simultaneidade, resources de replicação etc.


O design lógico do database deve estar centrado na análise de dados e nos requisitos do usuário; a escolha de usar um database relacional viria mais tarde e, mais tarde, a escolha do MySQL como sistema de gerenciamento de database relacional e, em seguida, a seleção de um mecanismo de armazenamento para cada tabela.

MYISAM:

  1. MYISAM suporta bloqueio de nível de tabela
  2. MyISAM projetado para necessidade de velocidade
  3. MyISAM não suporta foreign keys, portanto, chamamos MySQL com MYISAM é DBMS
  4. O MyISAM armazena suas tabelas, dados e índices no espaço em disco usando três arquivos diferentes separados. (tablename.FRM, tablename.MYD, tablename.MYI)
  5. MYISAM não suporta transactions. Você não pode confirmar e reverter com o MYISAM. Depois de emitir um comando, é feito.
  6. MYISAM suporta pesquisa de texto completo
  7. Você pode usar o MyISAM, se a tabela for mais estática com muitos select e menos update e delete.

INNODB:

  1. InnoDB suporta bloqueio de nível de linha
  2. InnoDB projetado para desempenho máximo ao processar alto volume de dados
  3. InnoDB suporta foreign keys, portanto, chamamos MySQL com InnoDB é RDBMS
  4. InnoDB armazena suas tabelas e índices em um tablespace
  5. O InnoDB suporta transactions. Você pode comprometer e reverter com o InnoDB