zerokarl 0 Denunciar post Postado Setembro 14, 2010 Bom dia. Sou novo no forum e gostaria de poder contar com a ajuda de alguém que entenda bastante sobre MySQL. Tenho um banco que armazena logs com 840GB distribuídos em 12 tabelas (cada uma com aproximadamente 70GB - A quantidade de registros ultrapassa 7 bilhões), e preciso criar índices em todas as tabelas para agilizar minhas consultas. O problema é que a criação desses índices está sendo bastante demorada. Pra se ter uma idéia, comecei, na sexta-feira (dia 10/09), a criar um índice em uma das tabelas, e até o momento (dia 14/09 10:20h) este índice não foi criado. Vi que o MySQL está criando uma tabela temporária de dados e uma de índices para armazenar os dados indexados, porém estes arquivos crescem lentamente. No momento, o arquivo temporário .MYD está com 51GB apenas... A minha dúvida então é: qual o melhor procedimento para criação de índices em tabelas grandes? Algumas informações: - estou usando MyIsam tables - os índices que desejo criar em todas as tabelas são compostos de dois campos (um VARCHAR(30) e um DATETIME) - sem índices, a consulta por um único registro leva 30min para ser concluída Agradeço antecipadamente aos que puderem me ajudar. []'s Compartilhar este post Link para o post Compartilhar em outros sites
giesta 29 Denunciar post Postado Setembro 14, 2010 bom, 70 gigas eh algo consideravel, mas eh um esforço computacional questionavel uma vez q se trata apenas de logs, mas pode ser q eu esteja errado Uma coisa q você pode tentar, mas eu nao garanto q va funcionar é criar a tabela vazia com os indices e depois dar um insert nela insert into taba_com_index select * from taba_sem_index alem de claro ajustar adequandamente os parametros de memoria Compartilhar este post Link para o post Compartilhar em outros sites
zerokarl 0 Denunciar post Postado Setembro 15, 2010 Obrigado pela sugestão, Giesta, porém isso eu já havia tentado. Inserir em tabelas indexadas tem o custo da perda de desempenho a cada nova inserção. Para você ter uma idéia, levei quase uma semana para dar carga em metade de uma tabela indexada. Nas outras (não indexadas) o tempo para dar carga total foi algo em torno de 24h. Acabei adotando outra saída para agilizar a criação do índice. Criei o índice em somente um campo (datetime) e modifiquei minha consulta para pesquisar no resultado da primeira consulta indexada (um select aninhado). Compartilhar este post Link para o post Compartilhar em outros sites