Sua intuição está correta AFAIK. A mesa está ordenada? link Tivemos algumas sugestões para otimizar inserções em massa.
Eu tenho um processo de replicação de dados que descarta e recria algumas tabelas em um banco de dados de destino e as carrega com dados de um banco de dados de origem (em execução em outro host, mas isso é irrelevante para a questão).
O banco de dados de destino precisa de chaves primárias e alguns outros índices em suas tabelas, mas não durante o carregamento de dados. No momento, estou carregando todos os dados e, em seguida, criando os índices. No entanto, a criação de índice leva muito tempo - 30 minutos do tempo de execução de 5 e meia hora do meu carregador de dados.
Minha intuição me diz que criar os índices no final deve ser mais rápido do que criá-los primeiro, já que o índice precisaria ser reescrito com cada inserção.
Alguém pode me dizer com certeza qual é o caminho mais rápido? FWIW, estou executando o MySQL 5.1 com tabelas InnoDB.
Sua intuição está correta AFAIK. A mesa está ordenada? link Tivemos algumas sugestões para otimizar inserções em massa.
Aqui está outra coisa para pensar.
Para todas as tabelas MyISAM, é melhor carregar em massa desativando os índices não exclusivos
ALTERAR TABELA myisamtabletoload DESABILITAR TECLAS;
INSERT INTO myisamtabletoload ...;
ALTER TABLE myisamtabletoload ENABLE KEYS;
Chaves Primárias e Chaves Únicas Preenchidas e Ordenadas Durante o INSERT.
Quando as TECLAS ATIVAS são executadas, todos os índices não exclusivos são criados por meio da Classificação.
Infelizmente, DISABLE KEYS e ENABLE KEYS não funcionam no InnoDB por causa das estruturas de chaves clusterizadas.
Tags mysql