2017-10-06 24 views
0

J'ai une table avec plus de 100K enregistrements et cette table a une clé primaire composée de 4 colonnes. Maintenant, je veux supprimer la clé primaire, mais garder les index créés par défaut en raison de la définition de la clé primaire de sorte que la recréation des index doit être évitée pour une telle grande valeur de données. J'utilise la version MariaDB 5.5.x.Comment faire pour supprimer la contrainte de clé primaire, mais garder l'index

+0

Vous pourriez essayer ceci - avant de laisser tomber la clé primaire, créer un index sur la colonne de clé, puis laisser tomber la clé primaire. Cela peut prendre moins de temps que de laisser tomber le PK et créer un nouvel index. –

Répondre

1

Lorsque vous supprimez la clé primaire, vous ne pouvez pas conserver uniquement la partie index simple.

Si la table est innodb, alors il vaut mieux d'abord laisser tomber la clé primaire, puis recréer l'index car tous les secondary indexes contain the primary key aussi bien. Donc, si vous créez d'abord l'index secondaire, puis laissez tomber le pk, alors mariadb doit également modifier l'index secondaire.

Si vous envisagez de créer un autre PK, créez-le d'abord, puis créez des index secondaires pour la même raison.

1

Dans InnoDB, la modification du PK (PRIMARY KEY) nécessite toujours la reconstruction de la totalité de la table. Période.

Effectuez tous les changements en un seul ALTER TABLE. Voici ce qui va arriver (donc vous pouvez voir pourquoi c'est le meilleur) ...

  1. Verrouiller la table (pour bloquer toute écriture).
  2. Créez une nouvelle table (vide) avec le même schéma que l'original.
  3. Modifier la nouvelle table en tous les moyens indiqués par le ALTER TABLE.
  4. Copiez toutes les données de sorte que la nouvelle table. Notez que le PK est changé, cela peut impliquer de réarranger les données.
  5. Recréez les index secondaires. (Je ne sais pas si cela est fait dans le cadre de l'étape 3, ou comme une passe distincte.)
  6. RENAME pour déplacer la nouvelle table à la place de l'ancienne. (Ceci est atomique et rapide.)
  7. Déverrouiller.

Si vous avez deux ALTERs pour apporter les deux modifications au PK, vous passeriez deux fois par toutes ces étapes. Chaque clé secondaire comprend une copie des colonnes PK.

Donc, tout changement à la PK nécessite reconstruire toutes les clés secondaires.

Dans InnoDB est-il mauvais pour avoir une table sans PK. (Un numéro de série caché sera fourni, mais cela rend la maintenance, la réplication, etc. plus douloureux.)

Si vous parlez de certains moteurs autres que InnoDB, eh bien, ne le faites pas. Vous devriez utiliser uniquement InnoDB. (Une grande partie de ce que j'ai dit ne s'applique pas à MyISAM.)