alter table adiciona campo tomando para sempre

1

com uma tabela de cerca de 2 milhões de linhas,

alter table xxx add yyy smallint default 0
está demorando, seu estado atual está copiando dados para a tabela tmp. a mesa está usando innodb, tem alguns índices. tmp_table_size = 4G e max_heap_table_size = 4g, por que demoraria tanto? como acelerar?     
por user12145 03.03.2011 / 22:43

1 resposta

2

No livro "High Performance MySQL" Segunda Edição de Jeremy Zawodny & Peter Ziestev existe um método de alta velocidade e alto risco de adicionar uma coluna à tabela, independentemente do tamanho da tabela. É algo assim:

MÉTODO 1

Assumindo que db é o banco de dados onde xxx reside

Passo 1. CREATE TABLE zzz LIKE xxx;

Passo 2. ALTER TABLE zzz adicionar yyy smallint padrão NULL; - Não usando 0 por enquanto

Etapa 3. Execute o seguinte no sistema operacional

serviço mysql stop
cd / var / lib / mysql / db
mv xxx.frm xxxold.frm
cp zzz.frm xxx.frm
serviço mysql start

Etapa 4. Tente ver se xxx é acessível

Se isso não funcionar, tente isto:

MÉTODO 2

Passo 1. CREATE TABLE zzz LIKE xxx;

Passo 2. ALTER TABLE zzz add yyy smallint padrão 0;

Passo 3. INSERIR EM zzz (col1, col2, ... colN) SELECIONE col1, col2, ... colN FROM xxx;

Passo 4. ALTER TABLE xxx RENAME jjj;

Passo 5. ALTER TABLE zzz RENAME xxx;

O segundo método tem que funcionar. O primeiro é recomendado a partir daquele livro que mencionei.

Dê uma chance a eles !!!

P.S. antes de tentar o primeiro método, backup de tudo (instantâneo LVM)

    
por 06.03.2011 / 22:00

Tags