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

Chaves de desabilitação e habilitação do MySQL


Você definitivamente tem que escolher sua abordagem com base no tipo de mecanismo... otimizando para MyISAM ou para InnoDB .

Recentemente, executamos um benchmark comparando diferentes maneiras de inserir dados e medimos o tempo desde antes da inserção e até que todos os índices sejam totalmente restaurados. Estava em uma tabela vazia, mas usamos até 10 milhões de linhas.

MyISAM com LOAD DATA INFILE e ALTER TABLE ... ENABLE/DISABLE KEYS ganhou sem dúvida em nosso teste (em um sistema Windows 7, MySQL 5.5.27 - agora estamos testando em um sistema Linux).

ENABLE e DISABLE KEYS não funcionam para InnoDB, é apenas MyISAM. Para InnoDB, use SET AUTOCOMMIT = 0; SET FOREIGN_KEY_CHECKS = 0; SET UNIQUE_CHECKS = 0; se você tiver certeza de que seus dados não contêm duplicatas (não se esqueça de configurá-los para 1 após a conclusão do upload).

Acho que você não precisa de OPTIMIZE TABLE após uma inserção em massa - as linhas do MySQL são ordenadas por inserção e o índice é reconstruído de qualquer maneira. Não há "fragmentação extra" fazendo uma inserção em massa.

Sinta-se à vontade para comentar se cometi erros factuais.

ATUALIZAÇÃO: De acordo com nossos resultados de teste mais recentes e completos, o conselho para DESATIVAR / ATIVAR chaves está errado.

Um colega de trabalho fez um programa executar vários testes diferentes - uma tabela com InnoDB / MyISAM pré-preenchida e vazia, velocidades de seleção e inserções com LOAD DATA LOCAL , INSERT INTO , REPLACE INTO e UPDATE , em tabelas "densas" e "fragmentadas" (não tenho certeza de como, acho que foi na linha de DELETE FROM ... ORDER BY RAND() LIMIT ... com uma semente fixa para que ainda seja comparável) e índices habilitados e desabilitados.

Testamos com muitas versões diferentes do MySQL (5.0.27, 5.0.96, 5.1.something, 5.5.27, 5.6.2) no Windows e no Linux (mas não as mesmas versões em ambos os sistemas operacionais). MyISAM só ganhou quando a mesa estava vazia. O InnoDB era mais rápido quando os dados já estavam presentes e geralmente funcionava melhor (exceto para espaço no disco rígido - MyISAM é menor no disco).

Ainda assim, para realmente se beneficiar dele, você tem que testá-lo você mesmo - com diferentes versões, diferentes configurações e muita paciência - especialmente em relação a inconsistências estranhas (5.0.97 foi muito mais rápido que 5.5.27 com a mesma configuração - nós ainda está procurando a causa). O que encontramos foi que DISABLE KEYS e ENABLE KEYS são quase inúteis e às vezes prejudiciais se você não começar com uma mesa vazia.