Importação Rápida em Massa de um Conjunto de Dados Grande para o MySQL

1

Eu tenho um conjunto de dados bastante grande que eu preciso importar para o MySQL. Eu gostaria de fazer o mais eficientemente possível, pois vou precisar fazer isso repetidamente. Existem truques para isso? Existe alguma maneira que é mais eficiente do que instruções INSERT estendidas?

Para resolver as questões no comentário, o formato original está em XML, embora eu já tenha um transformador para colocá-lo no formato CSV. Estou trabalhando com o MySQL 5.1.xe o banco de dados de destino é o InnoDB. Existem relações entre os dados, mas não tenho restrições e os dados não são limpos o suficiente na maioria dos casos para impor-lhes.

    
por Tim 08.07.2009 / 18:08

5 respostas

2

Tente mysqlimport você pode importar diretamente de arquivos CSV.

    
por 08.07.2009 / 18:30
2

Eu leria o manual mysql , estava pensando em INSERT AFTER , mas LOAD DATA INFILE parece interessante "20 vezes mais rápido" ....

    
por 08.07.2009 / 20:26
1

Há uma ferramenta ETL de código aberto chamada Pentaho Data Integration que possui uma opção de carregamento em massa mysql (sob a pasta experimental no modo Design ). Você também pode carregar rapidamente os dados de maneira independente da plataforma, usando as etapas CSV Input e Table Output. Se você precisar fazer algum processamento nos dados antes de carregá-los, poderá codificar essa lógica dentro deste programa.

    
por 08.07.2009 / 20:10
0

Use /*!40000 ALTER TABLE tbl_name DISABLE KEYS */; e /*!40000 ALTER TABLE tbl_name ENABLE KEYS */; em torno das instruções INSERT para cada tabela.

Isso garantirá que índices não exclusivos sejam criados depois que todas as linhas estiverem presentes, em vez de tentar construí-las peça por peça.

    
por 08.07.2009 / 20:24
0

Mesmo um "insert ..." em massa não deve demorar muito. Eu peguei uma nova exportação de banco de dados do JIRA de 200MB e carreguei em um banco de dados virgem em aproximadamente 30 segundos.

    
por 08.07.2009 / 20:31