Descartará a tabela de reconstrução AUTO_INCREMENT no MySQL?

1

Eu tenho tabela com o seguinte esquema:

CREATE TABLE 'tblsomething' (
  'something_id' int(11) NOT NULL AUTO_INCREMENT,
   …
 PRIMARY KEY ('something_id')
) ENGINE=InnoDB AUTO_INCREMENT=144620955 

Preciso largar o incremento automático. Então estou pensando em fazer:

ALTER TABLE tblsomething MODIFY something_id int NOT NULL;

Mas essa parte do documento do MySQL me preocupa:

In most cases, ALTER TABLE works by making a temporary copy of the original table. The alteration is performed on the copy, and then the original table is deleted and the new one is renamed. While ALTER TABLE is executing, the original table is readable by other sessions. Updates and writes to the table are stalled until the new table is ready, and then are automatically redirected to the new table without any failed updates.

Então, a queda do incremento automático é, na verdade, um desses casos? Isso trancará minha mesa?

    
por vartec 18.09.2009 / 11:14

2 respostas

1

Remover (ou configurar) o sinalizador AUTO_INCREMENT não reconstrói a tabela inteira. Você pode facilmente testar isso usando uma tabela com um grande número de linhas (definindo que o sinalizador é quase instantâneo).

Atualização: Isso provavelmente foi verdade há muito tempo (com o MyISAM), mas parece que não é mais o caso.

    
por 18.09.2009 / 11:32
2

Certas declarações de ALTER TABLE sempre produzirão uma reconstrução temida como você descreve.

No caso de remover os campos AUTO_INCREMENT , a única maneira de evitar isso é alguma invasão não suportada. Isso envolve a modificação de uma cópia do arquivo .frm da tabela. Funciona porque as informações do esquema são mantidas separadamente das informações de dados e índice e as modificações não produzem inconsistências entre as três.

Você pode encontrar uma discussão sobre isso em mysqlperformanceblog.org e no Livro MySQL de Alto Desempenho . É importante ressaltar que não é suportado. Eu recomendo que você teste ambos os métodos (simples ALTER TABLE e .frm edição) em uma cópia dos dados primeiro. Veja quanto tempo os dois processos demoram e verifique a consistência depois.

Editar: Desculpe, reli o que estava escrito e ALTER COLUMN não se aplica ao que você está fazendo. Eu atualizei o texto acima.

    
por 18.09.2009 / 11:40