Isso é semelhante a outro post meu , mas agora tenho uma estrutura de tabela diferente e ainda não está claro quais parâmetros do MySQL devem ser alterados para aproveitar a memória RAM extra que minha máquina possui --- portanto, se parecer uma duplicata, deixe saber a melhor forma de reformular o que estou perguntando.
Tenho a seguinte tabela: create table mytable (id1 int, id2 int, score float) engine MyISAM,
com 50 bilhões de registros.
Pretendo adicionar um índice na primeira coluna ( alter table mytable add index myindex (id1)
), e gostaria de saber quais parâmetros do MySQL poderiam ser alterados para aproveitar essa memória extra (por exemplo, buffers?)?
Observação: o tipo de mecanismo não precisa ser MyISAM se isso fizer diferença.
Sua primeira preocupação é o carregamento de dados. Como você não pretende ter uma chave primária, mas apenas um índice, você deve ordenar seus dados antes de carregar pela coluna de índice id1, em qualquer tipo de UNIX:
Para carregar os dados, use mysqlimport ou LOAD DATA no prompt do MySQL. Para acelerar o carregamento, as tabelas MYISAM se beneficiam do aumento de *bulk_insert_buffer_size*, *myisam_sort_buffer_size* ou *key_buffer_size*, para tabelas INNODB, aumente *innodb_buffer_pool_size* e *innodb_log_file_size*.
Esses aumentos podem não ser suficientes e o carregamento ainda pode diminuir à medida que a memória é preenchida. Nesse caso, é mais eficiente carregar os dados em blocos. Você pode monitorar a velocidade executando um du de hora em hora no diretório raiz do mysql:
Apenas para completar (não relevante para este caso específico): Desativar índices também ajuda a acelerar o processo de carregamento.
Agora, para consultar: Isso é um pouco mais complexo, pois depende de seus dados e da maneira como você deseja consultar sua tabela. Os maiores fatores que influenciam o desempenho são:
buffers: definidos por variáveis. Execute suas consultas típicas e compare a saída "mostrar variáveis" e "mostrar status" para identificar gargalos.
índices: você já cobriu isso
junções: dependendo da maneira como você une outras tabelas, pode ser
melhor desnormalizar sua(s) tabela(s) em um estilo de data warehouse,
especialmente se você deseja unir duas tabelas grandes.
Ótimos artigos sobre carregamento de dados e otimização de consulta de tabelas grandes podem ser encontrados em: http://www.mysqlperformanceblog.com/2007/05/24/predicting-how-long-data-load-would-take/ http://www .mysqlperformanceblog.com/2006/06/09/why-mysql-could-be-slow-with-large-tables/
Revise os valores padrão e permitidos para essas e outras variáveis em: http://dev.mysql.com/doc/refman/5.5/en/server-system-variables.html