Antes de decidir sobre MyISAM ou InnoDB, você terá que examinar os dois Storage Engines em termos de como cada um armazena em cache
MyISAM
Quando lidos, os índices de uma tabela MyISAM podem ser lidos uma vez a partir do arquivo .MYI e carregados no MyISAM Key Cache (conforme dimensionado por key_buffer_size ). Como você pode tornar a tabela MyISAM mais fácil de ler? Com isso:
ALTER TABLE mytable ROW_FORMAT=Fixed;
Eu escrevi sobre isso em minhas postagens anteriores
-
Sep 20, 2011
: link (leia este primeiro primeiro) -
May 10, 2011
: link (TRADEOFF # 2) -
Aug 12, 2011
: link (Parágrafo 3) -
Jan 03, 2012
: link (Sob o cabeçalho Replicação )
InnoDB
OK, e o InnoDB? O InnoDB faz alguma E / S de disco para consultas? Surpreendentemente, sim, faz !! Você provavelmente está pensando que sou louco por dizer isso, mas é absolutamente verdade, mesmo para consultas SELECT . Neste ponto, você provavelmente está se perguntando "Como no mundo está o InnoDB fazendo E / S de disco para consultas?"
Tudo volta ao InnoDB sendo um ACID - Mecanismo de armazenamento transacional de reclamação. Para que o InnoDB seja Transacional, ele deve suportar o I
em ACID
, que é Isolamento. A técnica para manter o isolamento para transações é feita através do MVCC, Controle de Concorrência Multiversão . Em termos simples, o InnoDB registra como os dados se parecem antes que as transações tentem alterá-los. Onde isso é gravado? No arquivo de espaço de tabela do sistema, melhor conhecido como ibdata1. Isso requer E / S de disco .
COMPARAÇÃO
Já que o InnoDB e o MyISAM fazem E / S de disco, quais fatores aleatórios determinam quem é mais rápido?
- Tamanho das colunas
- Formato da coluna
- Conjuntos de caracteres
- Intervalo de valores numéricos (exigindo INTs grandes o suficiente)
- Linhas divididas entre blocos (encadeamento de linhas)
- Fragmentação de dados causada por
DELETEs
eUPDATEs
- Tamanho da chave primária (o InnoDB possui um índice clusterizado, exigindo duas pesquisas importantes)
- Tamanho das entradas do índice
- a lista continua ...
EPÍLOGO
Assim, em um ambiente de leitura pesada, é possível que uma tabela MyISAM com um Formato de Linha Fixo supere as leituras InnoDB do InnoDB Buffer Pool se houver dados suficientes sendo gravados nos logs de undo contidos em ibdata1 para suportar o comportamento transacional imposto aos dados do InnoDB. Planeje seus tipos de dados, consultas e mecanismo de armazenamento com cuidado. Uma vez que os dados aumentam, pode se tornar muito difícil mover os dados.
A propósito, escrevi algo assim cinco dias atrás: Como atribuo um limite de memória para mySQL?