MySQL gestisce ancora gli indici in questo modo?


8

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

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?

Risposte:


14

Questo è il modo in cui MySQL 4.x lo ha fatto e mi ha gravemente aggravato.

In effetti, c'era una formula che ho calcolato su quante manovre di indice di questo tipo fossero necessarie

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

Buone notizie, MySQL 5.x non lo fa !!!

Se MySQL 5.x lo facesse, oggi sarei un DBA PostgreSQL (senza offesa per PostgreSQL, è un eccellente RDBMS a sé stante).

AGGIORNARE

Oh mio Dio, ho letto il post !!! Quel post è venuto da me !!!

Non avrei mai pensato che qualcuno avrebbe scavato questo post.

Per favore, lascia cose come queste morte e sepolte. Ora sto avendo dei flashback !!!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.