Estou confuso sobre qual mecanismo mysql devo escolher (vamos falar sobre os mais usados: MyISAM e InnoDB).
As teorias dizem:
- Ambos trabalham com índices BTree, mas MyISAM também pode trabalhar com índices FULLTEXT.
- O InnoDB é mais rígido na integridade dos dados, enquanto o MyISAM é flexível.
- InnoDB tem transações enquanto MyISAM não.
- O InnoDB possui chaves estrangeiras e restrições de relacionamento, enquanto o MyISAM não.
- MyISAM são mais rápidos para ler, mas mais lentos para escrever (não tenho certeza sobre este).
Quando crio uma tabela, devo sempre sacrificar algo se quiser manter a integridade e quiser agilizar a consulta fazendo busca por "texto"?
Como você decide qual mecanismo usar se precisar
- integridade?
- Rapidez ?
- restrições ?
- pesquisar por texto?
- transações?
O MySQL 5.6 também deve suportar a indexação FULLTEXT. Procure-o quando for GA .
Isso é verdade devido ao fato de que o InnoDB oferece suporte ao isolamento de transação via MVCC . Isso, em parte, torna o InnoDB totalmente compatível com ACID .
Isso depende inteiramente do formato da linha da tabela MyISAM (fixo ou dinâmico). Lento é relativo. Afinal, cada instrução DML contra um MyISAM executa um bloqueio de tabela completo todas as vezes.
Dado um cache grande o suficiente, o InnoDB pode ser mais rápido para leituras e gravações porque os COMMITs podem ser atrasados. Isso deixa os dados já armazenados em cache no InnoDB Buffer Pool disponíveis para leituras diretamente da memória.
O InnoDB armazena dados e índices, enquanto o MyISAM armazena apenas índices . Assim, leituras de disco para dados do MyISAM são sempre necessárias.