Eliminare un indice duplicato in MySQL stava impiegando piuttosto tempo, quindi mentre aspettavo l'ho cercato e ho trovato questo post del 2006, parlando di come MySQL gestisce ADD
e DROP
indicizza.
Se una tabella T è una tabella MySQL con quattro indici (ndx1, ndx2, ndx3, ndx4) e si desidera "modificare l'indice di rilascio della tabella T ndx3;" ecco esattamente cosa succede sotto il cofano:
1) MySQL copia T.MYD in una tabella temporanea, ovvero S.MYD e S.MYI a zero byte. 2) MySQL modifica la tabella S aggiungi indice ndx1 (...); 3) MySQL modifica la tabella S aggiungi indice ndx2 (...); 4) MySQL 'altera la tabella S aggiungi indice ndx4 (...); 5) MySQL elimina T.MYD ed elimina T.MYI 6) MySQL rinomina S.MYD in T.MYD e rinomina S.MYI in T.MYI
È ancora vero? Il suo consiglio è ancora valido?
Data la stessa tabella MyISAM T con quattro indici (ndx1, ndx2, ndx3, ndx4) e si desidera "modificare l'indice di rilascio della tabella T ndx3;" prova questo invece:
1) crea una tabella T1 come T; Questo crea una tabella vuota T1 con gli indici ndx1, ndx2, ndx3 e ndx4. 2) alterare la tabella T1 drop index ndx3; Questo fa cadere l'indice ndx3 sul T1 vuoto, che dovrebbe essere istantaneo. 3) inserire in T1 selezionare * da T; Questo popolerà la tabella T e caricherà tutti e tre gli (3) indici per T1 in un passaggio. 4) drop table tabella T; 5) modifica la tabella T1 rinomina in T;
Come gestite tutti l'aggiunta e la rimozione di indici da tabelle di grandi dimensioni?