Se você decidiu usar um banco de dados MySQL para sua aplicação, vai precisar escolher bem a engine de armazenamento correta e mais apropriada para a sua situação.

Dependendo do caso, uma determinada engine pode melhorar ou piorar o desempenho e a capacidade de sua aplicação.

Se você não faz a menor idéia do que estou falando, aí vai uma explicação curta e simples sobre as engines dos DBMS (gerenciadores de banco de dados): uma storage engine nada mais é do que a camada de software responsável pelas operações básicas realizadas em um banco de dados: criar, ler, atualizar e remover (também chamada pela sigla CRUD pelos desenvolvedores [Create, Read, Update, Delete] ).

No momento da escrita deste post existem 20 engines para o MySQL. Mas quero tratar somente de duas que são as mais comuns e utilizadas em 90% das aplicações: MyISAM e InnoDB.

A partir do momento que você entende as diferenças básicas das principais engines do MySQL, você vai poder aproveitar a flexibilidade de usar diferentes engines num mesmo banco.

Isso mesmo, você pode utilizar várias engines num único banco de dados MySQL, em diferentes tabelas.

A maioria dos desenvolvedores iniciantes e mesmo muitos que estão aí no mercado a um bom tempo não fazem a menor idéia do que sejam as storages engines e simplesmente escolhem a primeira que aparece, achando que não faz nenhuma diferença.

No final desse post você não será mais igual a eles 😉

MyISAM

Prós e Contras

  • MyISAM se enquadra melhor em situações com altas taxas de selects e baixas taxas de insert/update/delete, e em operação não transacionais.
  • Perfeito para buscas rápidas em textos.
  • MyISAM é péssimo para altas taxas de inserts e updates por causa do table locking. Locking é o processo de travar uma linha ou tabela de receber qualquer operação externa enquanto a operação atual não for finalizada. Ter locking na tabela significa que o MyISAM lida com inserts/updates de maneira individual, enquanto outras engines conseguem lidar com vários processos em paralelo.
  • Tabelas MyISAM não possuem suporte a chaves estrangeiras (foreign keys).

InnoDB

Prós e Contras

  • InnoDB é perfeito para operações paralelas (simultâneas) de insert/update/delete por causa do row locking, ou seja, a trava ocorre somente na linha, permitindo maior concorrência de processos e consequentemente uma performance muito superior.
  • Em contrapartida, uma aplicação com altas taxas de selects não transacionais perde em desempenho no InnoDB.
  • InnoDB possui suporte a chaves estrangeiras (foreign keys). Isso significa maior integridade dos dados e maior desempenho em consultas de select transacionais.

Principais Diferenças (MyISAM vs InnoDB)

A tabela abaixo resume as principais diferenças entre estas duas engines. Somente as características que diferem uma da outra é que estão listadas.

Característica MyISAM InnoDB
Transações ACID Não Sim
Propriedades ACID Configuraveis Não Sim
Crash Safe Não Sim
Suporte a chaves estrangeiras (foreign keys) Não Sim
Controle de Concorrência Multi versão (MVCC) Não Sim
Tipos de dados Geospatial Sim Sim
Indexação Geospatial Sim Não
Indexador para buscas Full-text Sim Não
Cache de dados Não Sim
Compressão de dados Sim Sim
Limite de armazenamento 256TB 64TB
Custo de armazenamento Baixo Alto
Custo de memória Baixo Alto
Tipo de Locking Tabela Linha

Especificando e alterando engines no MySQL

A engine é especificada no momento da criação de uma tabela. Se você não especificar nenhuma, o MySQL vai escolher a engine padrão. Para versões anteriores a 5.5 a engine é MyISAM. Para versões posteriores a padrão é InnoDB. Pra saber qual a engine padrão da sua versão do MySQL, digite o seguinte comando no seu terminal mysql:

A engine padrão é a informada na coluna ‘Value’.

É possível migrar de uma engine para outra. Porém se for migrar uma tabela muito grande pode demorar bastante tempo. Além disso podem ocorrer problemas de compatibilidade uma vez que nem todas características são suportadas em ambas engines.

O comando acima informa a engine atual da tabela ‘Carros’, no caso InnoDB. Para alterar basta um simples comando:

Este comando alterou a engine da tabela. Se rodarmos novamente o comando:

Note que a engine foi alterada corretamente para MyISAM.

Considerações

Deu pra perceber que nenhuma engine é ideal para todas as circunstâncias num banco MySQL. As vantagens e desvantagens devem ser consideradas. Precisa de uma engine para um sistema de pagamento? Vai precisar de uma que possua melhor segurança e integridade de dados. InnoDB é a escolha certa. Precisa de um buscador de texto rápido, então MyISAM é a escolha apropriada. Se precisar utilizar chaves estrangeiras, a InnoDB é a única das duas que possui suporte, então a escolha também é óbvia.

Num post futuro pretendo falar sobre as outras engines não tão comuns mas muito úteis em algumas situações específicas de um banco de dados MySQL.

Fabio Ferreira on EmailFabio Ferreira on InstagramFabio Ferreira on Twitter
Fabio Ferreira

Desenvolvedor Javascript e PHP, é editor do blog Café na Veia e também atua como desenvolvedor web freelancer na cidade de São Paulo.


Author: Fabio Ferreira

Desenvolvedor Javascript e PHP, é editor do blog Café na Veia e também atua como desenvolvedor web freelancer na cidade de São Paulo.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Instagram did not return any images.

Siga também nosso Instagram!