É mais rápido criar índices antes ou depois do carregamento de dados no MySQL?

2

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.

    
por Josh Glover 16.02.2011 / 17:24

2 respostas

4

Sua intuição está correta AFAIK. A mesa está ordenada? link Tivemos algumas sugestões para otimizar inserções em massa.

    
por 16.02.2011 / 17:41
1

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.

    
por 18.02.2011 / 15:33

Tags