Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

preencher um MySQL com uma grande série de linhas rapidamente


De um modo geral, você pode usar qualquer um ou mais dos seguintes:
  • Iniciar uma transação, fazer inserções, confirmar
  • Empacote vários valores em uma única inserção na consulta
  • Retire todas as restrições antes de inserir e restabeleça as restrições após a inserção em massa (exceto possivelmente a chave primária, embora não tenha muita certeza disso)
  • Use insert into ... select se adequado

O primeiro (usando transações) provavelmente ajudará, mas não tenho certeza se funciona em tabelas myisam, com innodb ele faz um trabalho muito bom - eu só uso quando sou forçado a usar mysql, prefiro postgresql .

No seu caso específico, inserindo 100.000 linhas de dados, você poderia fazer o seguinte:
INSERT INTO status(id, responseCode, lastUpdate) SELECT @row := @row + 1 as row, 503, NOW() FROM 
(select 0 union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) t,
(select 0 union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) t2, 
(select 0 union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) t3, 
(select 0 union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) t4, 
(select 0 union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) t5, 
(SELECT @row:=0) t6;

Testei isso na minha máquina, obtive:
Query OK, 100000 rows affected (0.70 sec)
Records: 100000  Duplicates: 0  Warnings: 0

Tenho certeza que você não pode ficar muito mais rápido do que isso para 100.000 linhas.