Eu tenho uma grande tabela de referência, 100 GB, em uma tabela MyISAM, carregá-la do zero vai bem (4 horas e meia) usando LOAD DATA INFILE.
Mas temos 1 GB por dia que queremos atualizar em um processo em lote usando LOAD DATA INFILE. Infelizmente, LOAD DATA INFILE impede os usuários de consultar essa tabela.
Existe uma maneira de contornar isso?
Por exemplo:
- Posso carregar os novos dados em outra tabela e inserir a partir dessa tabela ou algo semelhante para permitir o carregamento dos dados e ler as consultas na tabela principal ao mesmo tempo?
- Posso fazer algum tipo de particionamento com novas tabelas adicionadas diariamente, unidas por uma visão? Isso seria uma má ideia com uma mesa tão grande?
Se sua tabela for um mecanismo MyISAM, você pode tentar especificar
CONCURRENT
em sua declaração.Dados de carga ref.
Inserção simultânea ref.
ATUALIZAÇÃO PARA EXPLICAÇÃO DE BLOCO GRATUITA
Quando você exclui uma linha, um bloco livre pode ocorrer, se você tiver blocos livres no "meio" de sua inserção, por exemplo, se você substituir linhas excluídas (índice e/ou chave primária) pelos dados de carregamento, a inserção simultânea não funcionará , quando os blocos livres são preenchidos na inserção futura, tornam-se concorrentes novamente.