¿MySQL todavía maneja índices de esta manera?

8

Dejar caer un índice duplicado en MySQL estaba tomando bastante tiempo, así que mientras esperaba busqué al respecto y encontré esta publicación de 2006, hablando sobre cómo maneja ADDe DROPindexa MySQL .

Si una tabla T es una tabla MySQL que tiene cuatro índices (ndx1, ndx2, ndx3, ndx4) y desea 'alterar el índice de caída de la tabla T ndx3'; Esto es exactamente lo que sucede debajo del capó:

1) MySQL copia T.MYD a una tabla temporal, es decir, S.MYD y un byte cero S.MYI. 2) MySQL 'altera la tabla S agrega índice ndx1 (...); 3) MySQL 'altera la tabla S agrega índice ndx2 (...); 4) MySQL 'altera la tabla S agrega índice ndx4 (...); 5) MySQL elimina T.MYD y elimina T.MYI 6) MySQL cambia el nombre de S.MYD a T.MYD y renombra S.MYI a T.MYI

¿Sigue siendo cierto? ¿Su consejo sigue siendo válido?

Dada la misma tabla MyISAM T que tiene cuatro índices (ndx1, ndx2, ndx3, ndx4) y desea 'alterar el índice de caída de la tabla T ndx3;' intente esto en su lugar:

1) crear la tabla T1 como T; Esto crea una tabla vacía T1 con índices ndx1, ndx2, ndx3 y ndx4. 2) alterar el índice de caída de la tabla T1 ndx3; Esto elimina el índice ndx3 en el T1 vacío, que debería ser instantáneo. 3) insertar en T1 seleccione * de T; Esto llenará la tabla T y cargará los tres (3) índices para T1 en una sola pasada. 4) caída de la mesa tabla T; 5) alterar el cambio de nombre de la tabla T1 a T;

¿Cómo manejan todos la adición y eliminación de índices de tablas grandes?

JIStone
fuente

Respuestas:

14

Así es como MySQL 4.x hizo esto y solía agravarme severamente.

De hecho, había una fórmula que calculé sobre cuántas maniobras de índice se necesitaban

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

¡Buenas noticias, MySQL 5.x no hace eso!

Si MySQL 5.x hiciera esto, hoy sería un DBA PostgreSQL (Sin ofender a PostgreSQL, es un excelente RDBMS por derecho propio).

ACTUALIZAR

¡Oh Dios mío, leí el post! ¡Esa publicación vino de mí !

Nunca pensé que alguien desenterraría esta publicación.

Por favor, deja cosas como esta muertas y enterradas. Ahora estoy teniendo flashbacks !!!

RolandoMySQLDBA
fuente