MySQL gère-t-il toujours les index de cette manière?

8

La suppression d'un index en double dans MySQL prenait assez de temps, donc pendant que j'attendais, j'ai cherché à ce sujet et trouvé ce post de 2006, parlant de la façon dont MySQL gère ADDet DROPindexe.

Si une table T est une table MySQL ayant quatre index (ndx1, ndx2, ndx3, ndx4) et que vous souhaitez «modifier la table T, supprimer l'indice ndx3; voici exactement ce qui se passe sous le capot:

1) MySQL copie T.MYD dans une table temporaire, c'est-à-dire S.MYD et un zéro octet S.MYI. 2) MySQL ne modifie pas la table S ajoute l'index ndx1 (...); 3) MySQL ne modifie pas la table S ajoute l'index ndx2 (...); 4) MySQL ne modifie pas la table S ajoute l'index ndx4 (...); 5) MySQL supprime T.MYD et supprime T.MYI 6) MySQL renomme S.MYD en T.MYD, et renomme S.MYI en T.MYI

Est-ce toujours vrai? Ses conseils sont-ils toujours valables?

Étant donné la même table MyISAM T ayant quatre index (ndx1, ndx2, ndx3, ndx4) et que vous souhaitez «modifier la table T drop index ndx3; essayez ceci à la place:

1) créer la table T1 comme T; Cela crée une table vide T1 avec les index ndx1, ndx2, ndx3 et ndx4. 2) modifier l'index de chute de la table T1 ndx3; Cela supprime l'index ndx3 sur le T1 vide, qui devrait être instantané. 3) insérer dans T1 select * de T; Cela remplira la table T et chargera les trois (3) index pour T1 en une seule passe. 4) table de table basse T; 5) modifier la table T1 renommée en T;

Comment gérez-vous tous l'ajout et la suppression d'index dans les grandes tables?

JIStone
la source

Réponses:

14

C'est ainsi que MySQL 4.x a fait cela et cela m'aggravait sévèrement.

En fait, il y avait une formule que j'ai calculée sur combien de telles manœuvres d'index étaient nécessaires

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

Bonne nouvelle, MySQL 5.x ne fait pas ça !!!

Si MySQL 5.x faisait cela, je serais un DBA PostgreSQL aujourd'hui (ce n'est pas une infraction pour PostgreSQL, c'est un excellent SGBDR à part entière).

MISE À JOUR

Oh mon Dieu, j'ai lu le post !!! Ce message est venu de moi !!!

Je n'ai jamais pensé que quelqu'un déterrerait ce message.

Veuillez laisser des trucs comme ça morts et enterrés. Maintenant j'ai des flashbacks !!!

RolandoMySQLDBA
la source