Soltar um índice duplicado no MySQL estava demorando bastante, então enquanto eu esperava, pesquisei e encontrei este post de 2006, falando sobre como o MySQL lida ADD
e DROP
indexa.
Se uma tabela T é uma tabela MySQL com quatro índices (ndx1, ndx2, ndx3, ndx4) e você deseja 'alterar o índice de descarte da tabela T ndx3;' Aqui está exatamente o que acontece sob o capô:
1) O MySQL copia T.MYD para uma tabela temporária, ou seja, S.MYD e um byte zero S.MYI. 2) O MySQL 'altera a tabela S e adiciona o índice ndx1 (...); 3) O MySQL 'altera a tabela S e adiciona o índice ndx2 (...); 4) O MySQL 'altera a tabela S e adiciona o índice ndx4 (...); 5) O MySQL exclui T.MYD e exclui T.MYI 6) O MySQL renomeia S.MYD para T.MYD e renomeia S.MYI para T.MYI
Isso ainda é verdade? O conselho dele ainda é válido?
Dada a mesma tabela T do MyISAM, com quatro índices (ndx1, ndx2, ndx3, ndx4) e você deseja 'alterar o índice de queda da tabela T ndx3;' tente isso:
1) crie a tabela T1 como T; Isso cria uma tabela vazia T1 com os índices ndx1, ndx2, ndx3 e ndx4. 2) alterar o índice de queda da tabela T1 ndx3; Isso descarta o índice ndx3 no T1 vazio, que deve ser instantâneo. 3) insira em T1 selecione * de T; Isso preencherá a tabela T e carregará todos os três (3) índices para T1 em uma passagem. 4) drop table table T; 5) alterar a tabela T1 renomear para T;
Como todos vocês lidam com a adição e remoção de índices de tabelas grandes?