O mecanismo de armazenamento MyISAM, padrão no MySQL até a versão 5.5, é o mais usado na WEB, em armazéns ou depósitos de dados e vários outros tipos de aplicações.
Neste texto, vou mostrar algumas de suas características e as situações onde o seu uso é indicado e quando não é.
Escolher o mecanismo de armazenamento (ou storage engine) mais adequado pras suas aplicações é crucial e uma decisão errada tomada nesta escolha pode ser de difícil reversão.
Antes do MySQL 5.5.5, ao criar uma nova tabela, o padrão escolhido pelo sistema será o MyISAM, a menos que você especifique outro. A partir desta versão, o padrão será o InnoDB.
SAIBA MAIS:
O mecanismo de armazenamento MyISAM é derivado de um outro, mais antigo, chamado ISAM — Indexed Sequential Access Method, originalmente desenvolvido pela IBM, para ser usado em mainframes. Ainda dentro da IBM, o ISAM evoluiu pro VSAM — Virtual Storage Access Method.
Atualmente, a IBM promove o uso do DB2.
Era possível usar o mecanismo de armazenamento ISAM até o MySQL 3.23. A partir de então, ele se tornou indisponível, embora seu código ainda estivesse incluído até a versão 4.1.
— Conheça outros mecanismos de armazenamento para MySQL.
As vantagens de usar o MyISAM
Atualmente, muitas distros Linux oferecem o MySQL em seus repositórios e, no Ubuntu 14.04 é a versão 5.5 que ainda estará lá, para ser baixada — onde o mecanismo de armazenamento padrão é o MyISAM. A Canonical tem planos de mudar do MySQL para MariaDB em um futuro próximo.
Eu posso citar, pelo menos, 4 boas razões para usar o MyISAM storage engine.
1 – a simplicidade
As tabelas MyISAM são simples. Se você é novato no assunto “bancos de dados” ou no que concerne ao MySQL, é recomendado começar a usar o MyISAM, antes de sair experimentando os outros.
Segue um exemplo de como criar um novo banco de dados e uma tabela no MySQL.
(Se você ainda não tem o MySQL instalado, dê uma olhada no artigo Como instalar o MySQL).
Para criar um banco de dados, usamos a declaração CREATE DATABASE. Em seguida, o selecionamos para uso, com USE. Veja como:
CREATE DATABASE teste; USE teste;
Uma vez criado o banco e selecionado para uso, vamos criar uma nova tabela dentro dele:
CREATE TABLE teste.meuslivros ( id int UNSIGNED NOT NULL AUTO_INCREMENT, titulo TEXT NOT NULL; autor VARCHAR(30) genero VARCHAR(20), PRIMARY KEY(id)) ENGINE = MyISAM;
O exemplo, acima, mostra como é simples e rápida a criação de uma nova tabela no MySQL. Se você tiver interesse, o artigo – como criar tabelas no MySQL –, mostra o processo com mais exemplos e detalhes.
2 – otimização e base de conhecimento
Eu poderia dizer que o MyISAM é muito rápido – mais rápido que muitos outros storage engines, mas os benchmarks feitos por várias empresas mostram resultados muito diferentes entre si. Esta variação se deve às tarefas executadas, às configurações dos servidores e do mysqld, entre outros fatores. A melhor medição, quem faz, é você, dentro do seu ambiente de trabalho. Ainda assim, é notória a performance do mecanismo de armazenamento MyISAM, nos testes.
Em função do tempo em que o MyISAM tem estado “na estrada”, há muitos sistemas plenamente otimizados para usa-lo.
Se você sente que o seu sistema não está perfeitamente otimizado para uso do MyISAM, há uma extensa base de conhecimento disponível na Internet para ajudá-la(o) a resolver isto.
3 – indexação FULLTEXT e busca dentro do banco de dados
Considerando a tabela que criamos, imagine que precisamos realizar uma pesquisa, percorrendo títulos e gêneros dos livros.
Uma solução simples, possibilitada pelo MyISAM é adicionar um índice FULLTEXT. Veja o exemplo:
ALTER TABLE teste.livros ADD FULLTEXT alltext (autor, genero);
Agora, fica fácil encontrar todos os livros que contenham as palavras “mauro vasconcelos” e “infanto-juvenil”, dentro da tabela:
SELECT * FROM teste.livros WHERE MATCH(autor, genero) AGAINST ('mauro vasconcelos infanto-juvenil');
Com uma alteração na declaração acima, é possível obter o mesmo resultado, só que ordenado por relevância. Veja:
SELECT *, MATCH(autor, genero) AGAINST ('mauro vasconcelos infanto-juvenil') FROM teste.livros ORDER BY rel DESC;
4 – uso de recursos em ambientes limitados
Uma das vantagens de qualquer sistema que tem longa estrada percorrida é a estabilidade conquistada pelos anos de uso, pessoas envolvidas no projeto e seu contínuo desenvolvimento.
O MyISAM é o mais indicado em sistemas de poucos recursos, em servidores de menor capacidade de processamento e/ou com pouco espaço de armazenamento em disco ou memória RAM.
Nesta arena, ele se mostra imbatível nos benchmarks de que falamos no item anterior, mesmo que você não dedique algum tempo a otimizar o hardware e o mysqld.
As desvantagens do mecanismo de armazenamento de tabelas MyISAM
Se há situações em que o MyISAM é o mais indicado para uso, há várias outras em que ele é superado por outros mecanismos.
Aqui, vou mostrar alguns dos problemas que administradores e programadores enfrentam ao usar o MyISAM, no MySQL.
1 – integridade de dados
O MyISAM não tem suporte a transações ou a restrições de chaves estrangeiras.
Leve em conta uma aplicação bancária, onde ocorre uma transferência monetária – o que envolveria duas declarações SQL UPDATE: uma para debitar o valor de uma conta; outra para creditar o mesmo valor à outra conta.
Se houvesse uma falha no servidor, exatamente neste momento, você poderia acabar com o valor nas duas contas ou em nenhuma delas. O recurso de “transações”, presente no InnoDB, é o que evita este tipo de situação.
2 – recuperação de acidentes
O MySQL é estável e confiável. Contudo, as tabelas MyISAM podem voltar corrompidas, após uma falha.
O problema pode ser resolvido com o uso de um REPAIR TABLE – o que é um trabalho administrativo a mais, na verdade.
3 – travamento de tabelas
Ao adicionar ou atualizar um registro em uma tabela MyISAM, todas as outras mudanças são impedidas pelo travamento, até que aquela operação seja completada.
É difícil demonstrar ou provar que este comportamento diminui a performance ou causa problemas à sua aplicação web, mas há um consenso entre especialistas de que o mecanismo mais adequado para você não é o MyISAM, se a sua aplicação realiza grandes quantidades de inserções e atualizações à tabela.
LEIA MAIS:
- Busca FULLTEXT — leia mais sobre pesquisas via FULLTEXT Index no MySQL.
- Storage engines — conheça os mecanismos de armazenamento suportados pelo MySQL.
- Tipos de dados — conheça os tipos de dados suportados dentro das tabelas MySQL
- mysqlcheck — veja como restaurar uma tabela corrompida.
- Bancos de dados — veja como criar novos bancos de dados no MySQL.
- Tabelas — aprenda, através de exemplos, como criar tabelas no MySQL.
Conclusão: devo usar o MyISAM?
Há uma série de situações em que o MyISAM tende a ser a opção mais indicada, de acordo com a relação de vantagens e desvantagens apresentada, até agora. Nas situações, abaixo, a resposta é sim:
- Você é iniciante no MySQL;
- Sua aplicação web é simples e não precisa de transações;
- Você precisa de velocidade;
- Deseja usar buscas FULLTEXT;
- Tem recursos de hardware limitados.
Já, se precisa fazer uso de “transactions” e a integridade dos dados é prioritária e crítica, outras opções devem ser consideradas.
Note que é comum se usar mais de um tipo de mecanismo de armazenamento dentro de um mesmo banco de dados. Algumas tabelas precisam usar o InnoDB, outras o MyISAM e outras podem usar o CSV – e todo mundo convive bem, sem problema algum.
Os tipos de aplicações mais indicados para usar o MyISAM são:
- CMS – Content Management Systems, ou sistemas de gestão de contúdo;
- Ferramentas de marcação de páginas favoritas online;
- Leitores RSS;
- Mecanismos de busca na web etc.
Espero que este texto tenha lhe sido útil e, se este for o caso, compartilhe com os seus amigos, nas redes sociais. Esta é sempre a melhor forma de agradecer e incentivar.