Muitos usuários visitam nosso site e fazem esta pergunta com frequencia. Embora não seja um trabalho finalizado, exibimos abaixo algumas diferenças que o ajudarão a se decidir sobre qual tipo de tabela você deverá usar em uma determinada situação.

InnoDB funciona mais rápido que MyISAM quando há modificações constantes nos dados, uma vez que este tipo de armazenagem usa a proteção por registros (row locking) e não a proteção por tabelas (table locking) como o faz o MyISAM. Contudo, em várias situações, InnoDB é mais lento que MyISAM, devido ao fato de que InnoDB funciona com transações. A armazenagem padrão do MySQL é MyISAM. Outro ponto interessante são as restrições de chaves estrangeiras (foreign key constraints) e transações. Estes recursos estão disponíveis apenas no InnoDB.

MyISAM é apropriado para tabelas cujos dados não mudam com frequência. Um exemplo disso é uma tabela de cidades e estados. Como geralmente este tipo de tabela é usado apenas como consultas, não há a necessidade do uso de InnoDB. MyISAM tem a vantagem de ser arquivos simples se comparado com o innodb, mesmo na opção para criar dentro do contexto, o arquivo fica instavel em volumes grandes, o mito sobre configurar o mysql em innodb está errado, VOCÊ SEMPRE DEVE CONFIGURAR O MYSQL, perfomace de cache é sempre importante.

Considerar também o uso de MYSQL 3, que é super mais leve, mas em contra-partida não tem suporte a subselect, nunca deixe de usar subselect, inner join, e counters. Repitir dados também não é um erro, exemplo melhor: BIGTABLE do google, quando você tem counters, vc tem counters mesmo, não queira varrer a tabela de pedidos toda hora para ver quantos produtos sairam e entraram, você pode fazer isso em uma rotina de backup, ou cada 10 min para ter certeza que está ok, mas não para todo pedido de produto corrente. (isso vale para qualquer modo)

O Banco de dados também tem um limite se você deseja fazer um site estilo americanas, ou mesmo o novo google, que dá quantos XX de item tipo foi encontrado, o melhor a se fazer é usar um sistema de indexação pronto para isso, exemplos clássicos são Lucene (Usado no Hibernate e na maioria dos EJB), Solr, HBase (esse ultimo é mais usado com Hadoop, no esquema MAP/REDUCE), como assim, não usar o banco?  é claro que você vai ter um banco de dados, mas a cada X minutos descarrega para o indice corrente, eles são feitos para criar facet search

Fora ainda CouchDB e outros bancos não relacionais, tudo possivel, se usar junto de um outro banco master. Também não esqueçamos do MYSQL-PROXY, sendo possivel mapear query dinamicamente para o nó X, ex: tenho um indice de InnoDB especializado para Geo-Search, um outro para Full-Text, um outro para Cruzamentos de categorias com outra regra de négocio importante, ex: volume, podendo ainda ser o mesmo servidor só que em diferentes portas, assim você escala as pesquisas, sem necessariamente precisar de mais hardware.

Gosto de pensar que o mysql é uma ferramente poderosa, que chega ao seu limite, quando desejamos fazer mais que isso, ex: ter job`s, usar algum middleware direto ao banco, ou até mesmo ter algum suporte mais interessante para usar sobre fibra ótica e storage, pq, bem funciona, ele vai funcionar, só que vai ser sempre na base da pesquisa, já outros sistemas são feitos para isso, e quando precisamos disso, quando falamos em BILHÕES de registro, não é uma micro-empresa, mas uma média para cima que costuma precisar, e a maioria dos sites também não, na verdade dificilmente você vai precisar fazer metade dessas técnicas, e NEM DEVE, pois isso é útil quando se tem volume, antes disso, fique no básico, o legal é saber que existe.

MyISAM

  • Foi implementado a partir do código da tabela ISAM., introduzindo diversas melhorias como:
  • Os arquivos de tabela são transportáveis entre diferentes sistemas operacionais;
  • Campos BLOB  e TEXT  podem ser indexados;
  • Os Arquivos índices e de dados podem ser armazenados em dispositivos diferentes (aumento de performance);
  • Algoritmos de distribuição de dados e gerenciamento de índices melhorados;

InnoDB

  • Rodam sob um engine, desenvolvido pelo Innobase( www.innodb.com), que acrescenta ao MySQL o suporte a TRANSAÇÕES e a CONSTRAINTS de chave estrangeira.
  • Para obter o máximo de performance com tabelas InnoDB é necessário configurar o arquivo my.conf(ou my.ini no Windows) de acordo com as características de hardware do servidor onde o MySQL está rodando. Os Detalhes dessa configuração podem ser obtidos no manual do InnoDB.