Há várias maneiras de otimizar inserções a granel. Alguns são:
-
LOAD DATA INFILE
. Existe uma API wrapper para . REDE . Essa é a maneira mais rápida, mas tem algumas limitações e diferenças semânticas em relação a inserções simples.
-
INSERT
de várias linhas declarações:
INSERT INTO temperature (temperature) VALUES (1.0), (2.0), (3.0), ...
Você não deve inserir 20.000.000 linhas de uma vez, mas pode tentar 1.000-10.000 para uma aceleração muito grande. Esta é uma maneira simples e sem problemas de aumentar a velocidade. Um fator de 10 e às vezes muito mais é muitas vezes possível.
-
Bloqueando a tabela (LOCK TABLES
).
-
Desativando índices temporariamente.
-
Ajuste de opções do MySQL.
-
INSERT DELAYED
(provavelmente não é tão útil aqui).
A documentação fornece detalhes mais elaborados nas opções. Algumas opções dependem do tipo de tabela (InnoDB vs. MyISAM ).
Uma sugestão geral:sempre especifique as colunas que você insere na frente de
VALUES
. Isso torna o código mais sustentável.