O MySQL ainda lida com índices dessa maneira?

8

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 ADDe DROPindexa.

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?

JIStone
fonte

Respostas:

14

Foi assim que o MySQL 4.x fez isso e isso me agravou severamente.

De fato, havia uma fórmula que eu calculei sobre quantas manobras de índice eram necessárias

Table with 0 indexes and adding 1 index tooks 1 temp table
Table with 1 index   and adding 1 index tooks 3 temp tables
Table with 2 indexes and adding 1 index tooks 6 temp tables
Table with 3 indexes and adding 1 index tooks 10 temp tables (I had eyewitnessed this !!!)
.
.
.
Table with n indexes and adding 1 index took (n + 1) X (n + 2) / 2 temp tables
.
.
.
Table with 16 indexes and adding 1 index took 153 temp tables

Boas notícias, o MySQL 5.x não faz isso !!!

Se o MySQL 5.x fizesse isso, eu seria um DBA do PostgreSQL hoje (sem ofensa ao PostgreSQL, é um excelente RDBMS por si só).

ATUALIZAR

Oh meu Deus, eu li o post !!! Esse post veio de mim !!!

Eu nunca pensei que alguém iria desenterrar este post.

Por favor, deixe coisas como esta mortas e enterradas. Agora estou tendo flashbacks !!!

RolandoMySQLDBA
fonte