O que é o InnoDB e o MyISAM no MySQL?

121

O que é InnoDBe está MyISAMdentro MySQL?

user130561
fonte
8
Duplicata do MySql: MyISAM vs. Inno DB! , ou você pode fazer a sua escolha: stackoverflow.com/search?q=myisam+vs+innodb
OMG Ponies
É o mecanismo de banco de dados ... kavoir.com/2009/09/…
Matthieu
podemos usar os dois mecanismos de armazenamento ao mesmo tempo em nosso banco de dados?
User130561
1
Você pode você lhes simultaneamente em diferentes tabelas, mas para uma determinada tabela terá de escolher qual você quer usar ...
Matthieu

Respostas:

110

InnoDBe MYISAM, são mecanismos de armazenamento para MySQL.

Esses dois diferem em sua implementação de bloqueio: InnoDBbloqueia a linha específica na tabela e MyISAMbloqueia a MySQLtabela inteira .

Você pode especificar o tipo dando MYISAMOR InnoDBao criar uma tabela no DB.

Siva
fonte
Resposta clara e simples.
vadiraj Jahagirdar
38

Dê uma olhada em

InnoDB e MyISAM

O InnoDB é um mecanismo de armazenamento para o MySQL, incluído como padrão em todos os binários atuais distribuídos pela MySQL AB. Seu principal aprimoramento em relação a outros mecanismos de armazenamento disponíveis para uso com o MySQL é o suporte a transações compatível com ACID

O MyISAM é o mecanismo de armazenamento padrão para as versões do sistema de gerenciamento de banco de dados relacional do MySQL anteriores à 5.5 1 . É baseado no código ISAM mais antigo, mas possui muitas extensões úteis. A principal deficiência do MyISAM é a ausência de suporte a transações. Versões do MySQL 5.5 ou superior foram alteradas para o mecanismo InnoDB para garantir restrições de integridade referencial e maior concorrência.

Adriaan Stander
fonte
1
podemos usar os dois mecanismos de armazenamento ao mesmo tempo em nosso banco de dados?
User130561
2
você pode, porque para cada tabela você pode definir um mecanismo de armazenamento diferente. outra pergunta é se você deveria. na documentação do mysql há algumas explicações sobre este tópico.
Nano7 19/04
18

Eles são mecanismos de armazenamento.

http://dev.mysql.com/doc/refman/5.1/en/storage-engines.html

MyISAM: O mecanismo de armazenamento padrão do MySQL e o mais usado em ambientes Web, data warehousing e outros aplicativos. O MyISAM é suportado em todas as configurações do MySQL e é o mecanismo de armazenamento padrão, a menos que você tenha configurado o MySQL para usar um diferente por padrão.

InnoDB: Um mecanismo de armazenamento seguro para transações (compatível com ACID) para MySQL que possui recursos de confirmação, reversão e recuperação de falhas para proteger os dados do usuário. O bloqueio no nível de linha do InnoDB (sem escalação para bloqueios de granularidade mais grosseiros) e as leituras de não bloqueio consistentes no estilo Oracle aumentam a simultaneidade e o desempenho para vários usuários. O InnoDB armazena dados do usuário em índices agrupados para reduzir a E / S para consultas comuns com base em chaves primárias. Para manter a integridade dos dados, o InnoDB também suporta restrições de integridade referencial da FOREIGN KEY.

mluebke
fonte
Então, enquanto instalamos o MySQL, precisamos especificar especificamente qual mecanismo de armazenamento usar como nosso banco de dados MySQL?
user130561
3
Como mencionado na minha postagem, o padrão é MyISAM. Se você deseja usar os recursos de um mecanismo de armazenamento diferente, como INNODB, sim, você precisará especificar. Isso não é feito durante a instalação, mas durante a criação da tabela inicial.
mluebke
3
Mas de acordo com isso: - dev.mysql.com/doc/refman/5.7/en/storage-engines.html ; O mecanismo padrão é o InnoDB.
Harsha
2
De acordo com dev.mysql.com/doc/refman/5.5/en/storage-engine-setting.html : "O mecanismo padrão é o InnoDB a partir do MySQL 5.5.5 (MyISAM antes do 5.5.5)" Portanto, o mecanismo padrão está agora InnoDB. Essa resposta foi publicado 16 dias após o primeiro lançamento-disponibilidade geral com InnoDB como o motor padrão;)
sofe
6

Eu gostaria de acrescentar que a capacidade de especificar um mecanismo de armazenamento específico por tabela é um dos pontos fortes do MySQL (além de fácil de usar e bom desempenho sem ajustes). Para todas as operações em que as transações são necessárias, fique com o InnoDB. No entanto, o MyISAM pode realmente acelerar as coisas quando as transações não são necessárias em determinadas situações - e requer menos espaço em disco e RAM em comparação com o InnoDB.

Dito isto, o InnoDB está melhorando o tempo todo:

Aprimoramentos de desempenho e escalabilidade do InnoDB 1.1

Damir Bulic
fonte
4

O MyISAM não segue o ACID, ao contrário do InnoDB, que segue as transações para manter a integridade dos dados.

O MyISAM suporta inserções simultâneas: Se uma tabela não tiver blocos livres no meio do arquivo de dados, você poderá INSERIR novas linhas nela, ao mesmo tempo em que outras threads estiverem lendo a tabela. MySqlDoc

Por isso, o MyISAM é mais rápido e ocupa menos espaço. Por exemplo, o MySQL MyISAM Storage Engine não suporta transações. restrições do MySQL MYISAM Há um pouco chamado inserção simultânea Por padrão, a variável é definida como 1 e as inserções simultâneas são tratadas conforme descrito abaixo . Se estiver definido como 0, as inserções simultâneas serão desativadas. Se estiver definido como 2, inserções simultâneas no final da tabela serão permitidas, mesmo para tabelas que excluíram linhas. Uma instrução INSERT pode ser executada para adicionar linhas ao final da tabela com select ao mesmo tempo, se não houver furos / linhas excluídas no meio da tabela (no momento da inserção simultânea).

O nível de isolamento padrão do mysql InnoDB é "Read Repeatable". Para o MyISAM, não há transação. O InnoDB usa o bloqueio no nível da linha, enquanto o MyISAM só pode usar o bloqueio no nível da tabela, e é por isso que o InnoDB tem recuperação de falhas melhor que o MyISAM. É necessário adquirir manualmente o bloqueio no nível da tabela no MyISAM, para evitar os efeitos de simultaneidade.

hi.nitish
fonte
3

O InnoDB é um mecanismo de armazenamento transacional do MySQL, enquanto o MyISAM é um mecanismo de armazenamento não transacional. Em outras palavras, o InnoDB segue as propriedades ACID para manter a integridade dos dados, mas o MyISAM não segue as propriedades ACID, falhando em manter a integridade dos dados.

Em uma tabela InnoDB (transacional), as alterações transacionais podem ser facilmente desfeitas se for necessária uma reversão. Mas as alterações feitas em uma tabela MyISAM (não transacional) não podem ser desfeitas quando é necessária a reversão de uma transação.

Por exemplo, você deseja transferir dinheiro da sua conta corrente para a conta de poupança. Isso é feito por uma transação que inclui 5 consultas.

1 START TRANSACTION;
2 SELECT balance FROM checking WHERE customer_id = 10233276;
3 UPDATE checking SET balance = balance - 200.00 WHERE customer_id = 10233276;
4 UPDATE savings SET balance = balance + 200.00 WHERE customer_id = 10233276;
5 COMMIT;

Suponha que o processo trava na etapa 4. Se uma tabela do InnoDB fosse usada aqui, uma reversão desfaria as alterações e você é salvo do risco de perder dinheiro. Literalmente, a tabela não tem conhecimento de qualquer falha, pois as alterações não serão confirmadas na tabela, a menos que a etapa 5 seja executada com êxito.

Mas no caso de uma tabela MyISAM, não é possível desfazer as alterações transacionais quando uma reversão é chamada ou se houver uma falha que leve à falha da transação. Isso significa que, se a transação falhar na etapa 3, o dinheiro será deduzido da sua conta corrente. Mas o dinheiro não teria sido adicionado à sua conta poupança.

Exemplo de cortesia: "MySQL de alto desempenho: otimização, backups e replicação" - livro de Arjen Lentz, Derek J. Balling, Jeremy Zawodny, Peter Zaitsev e Vadim Tkachenko

Steffi Keran Rani J
fonte
1

Quando o servidor MySQL trava, os dados podem ser recuperados muito mais facilmente de um conjunto de tabelas MyISAM do que daquele grande arquivo de transação do InnoDB. Cada tabela MyISAM possui um arquivo separado e, se nenhuma operação de gravação estiver sendo feita nessa tabela durante a falha - ela não será afetada. No caso do InnoDB, todo o arquivo de transação de todo o servidor MySQL deve ser indexado novamente ou o que for que ocorre após uma falha. Isso pode ficar bastante confuso.

Alex Gnatko
fonte
0

O InnoDB é o padrão NOT myISAM https://dev.mysql.com/doc/refman/5.7/en/innodb-introduction.html "O InnoDB é o mecanismo de armazenamento padrão do MySQL. A menos que você tenha configurado um mecanismo de armazenamento padrão diferente, emitindo um A instrução CREATE TABLE sem uma cláusula ENGINE = cria uma tabela InnoDB "

adwairi
fonte