As tabelas InnoDB ou MyISAM oferecem melhor desempenho de inserção no MySQL 5.1?

2

Eu preciso inserir linhas o mais rápido possível em um banco de dados com tabelas recém-criadas e sem índices. Eu estou olhando para a ordem de 20 milhões de linhas, o que não é muito. As tabelas InnoDB ou MyISAM me dariam o melhor desempenho?

Obviamente, há outros truques de carregamento em lote que eu estou vendo também.

    
por Josh Glover 17.02.2011 / 09:25

3 respostas

4

O InnoDB é transacional, então o MyISAM, que não se preocupa com gravações atômicas, será mais rápido.

    
por 17.02.2011 / 09:35
2

O MyISAM será mais rápido que o InnoDB para o caso que você descreve. Se você está simplesmente procurando obter dados no MySQL o mais rápido possível, veja LOAD DATA INFILE .

    
por 17.02.2011 / 09:32
1

Aqui está algo que ninguém mencionou ainda.

Se você converter o formato de linha das tabelas MyISAM de DINÂMICO (padrão) para FIXO, você poderá aumentar o desempenho geral do SQL com relação à tabela em pelo menos 20%.

De acordo com páginas 71-73 de Projeto e Ajuste do Banco de Dados MySQL (ISBN 0-672-32756-1) , basta executar o seguinte comando em qualquer tabela MyISAM:

ALTER TABLE tblname ROW_FORMAT=FIXED;

e você terá um bom aumento de desempenho em suas consultas em relação a essa tabela.

O exemplo dado no livro afirmou que as consultas contra a tabela MyISAM DYNAMIC-row levaram 50% mais tempo para executar a tabela MyISAM de linha FIXED. Se você pegar a tabela MyISAM de linha FIXA e compactá-la usando myisampack, a tabela MyISAM de linha FIXED compactada consultará 10% mais rápido que a tabela MyISAM de linha FIXED descompactada.

Existe uma séria desvantagem nessa abordagem ??? A tabela MyISAM de linha FIXA é pelo menos duas vezes maior do que suas contrapartes MyISAM de linha DINÂMICA. Então, você poderia se dar ao luxo de trocar velocidade por espaço, você deveria ir para tabelas MyISAM de fileiras FIXAS. Em seguida, todas as consultas serão mais rápidas sem alterações adicionais na estrutura da tabela.

Você também pode executar o nome de bloco ALTER TABLE ROW_FORMAT = FIXED; contra uma tabela InnoDB também. Se você fez isso em tabelas nos mecanismos de armazenamento InnoDB e MyISAM, você ainda não teria condições de igualdade. A borda sempre iria para o MyISAM. O motivo ??? Todas as pesquisas de índice não exclusivas devem atravessar um índice não clusterizado e, em seguida, através do índice clusterizado para acesso rowid. Índices MyISAM só passam por um índice no máximo.

Eu não estou apenas conjecturando sobre isso. Cerca de 4 anos atrás, eu, pessoalmente, peguei uma tabela de 2GB, rodei o ALTER TABLE e o expandi para 3.7GB. Todas as consultas resultantes foram em média 20% mais rápidas do que estavam em execução antes de alterar o formato da linha.

Eu recomendo fazer isso para todos os MyISAM e InnoDBs se você quiser aumentar o desempenho e se você não se importa com o aumento do tamanho dos arquivos.

    
por 21.04.2011 / 18:08