Com o MySQL, quanto tempo um "ALTER TABLE ... DISABLE KEYS;" última declaração?


12

Se você desabilitar as chaves (suspendendo a indexação) em uma tabela mysql INNODB, quanto tempo dura essa configuração?

Para uma consulta como:

ALTER TABLE users DISABLE KEYS;

As chaves são reativadas no final do script? ou eles duram até você ativar novamente a indexação explicitamente?


Esta pergunta merece um +1 por ajudar outras pessoas a perceberem algo sobre DISABLE KEYS, ENABLE KEYS e InnoDB.
RolandoMySQLDBA


Respostas:


7

O Manual Fino (que vale a pena ler) sugere que o efeito dessa declaração dura até que uma ALTER TABLE ... ENABLE KEYSdeclaração correspondente seja executada.


6

Na realidade, ALTER TABLE ... DISABLE KEYS e ALTER TABLE ... ENABLE KEYS não funcionam !!!!

Eu resolvi isso em 13 de fevereiro de 2011.

Fiz algumas escavações adicionais e descobri na empresa mãe do InnoDB, a InnoBase Oy (antes de fazer 7 de 9 no Oracle Borg), que esse é realmente o caso.

Este link sugere executar DISABLE KEYS e desativar chaves estrangeiras juntas. Embora eu pense que ambos são desnecessários, isso aparentemente funcionou para alguém.

UPDATE 2011-07-18 12:35 EDT

Essa é uma pergunta muito boa, porque expõe um mal que sobrou no MySQL. O programa mysqldump descarta cegamente DISABLE KEYS e ENABLE KEYS ao redor da criação e carrega sobre todas as tabelas sem levar em consideração o mecanismo de armazenamento. Como DISABLE KEYS e ENABLE KEYS não funcionam (na melhor das hipóteses, não tem efeito) nas tabelas do InnoDB, pois funciona corretamente para o MyISAM, esse fato desconhecido deve ser melhor documentado pela comunidade MySQL. Sim, o MySQL está no meio do Império Galáctico, conhecido como Oracle. Não vou prender a respiração com as alterações de documentação que estão por vir.


3
Fazer uma declaração é uma coisa. Gritar usando maiúsculas e negrito é um tanto excessivo e completamente desnecessário.
John Gardeniers

1
@ John: desculpe-me por parecer excessivamente entusiasmado. Eu não estou bravo com ninguém. ALTER TABLE DISABLE / ENABLE KEYS contra o InnoDB não está bem documentado. A Oracle também não vai melhorar as coisas.
RolandoMySQLDBA

@RolandoMySQLDBA existe alguma solução alternativa para evitar que o mysqldump coloque DISABLE KEYS e ENABLE KEYS no arquivo de despejo?
pahnin
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.