2012-09-10 5 views
0

J'ai une base de données MySQL qui devrait contenir environ 50-100 millions d'enregistrements.Le moyen le plus efficace d'appliquer l'unicité pour varchar dans une grande table

Mes champs de table sont: TABLE_ID (INT), TABLE_STRING (VARCHAR 255), TABLE_BOOL (INT)

TABLE_ID est ma clé primaire, mais je dois vous assurer que TABLE_STRING est maintenue unique pour toutes les lignes de la table.

Dois-je définir TABLE_STRING comme index et utiliser mon script pour utiliser un SELECT pour vérifier si la chaîne existe déjà ou doit définir TABLE_STRING comme unique dans mes paramètres de table?

Existe-t-il un autre moyen d'y parvenir? Si non, lequel de ce qui précède est le meilleur?

Merci,

+0

Quelque chose ne va pas avec l'ajout d'une clé unique sur le champ table_string? Les clés ne sont mises à jour que lorsque vous ajoutez/modifiez/supprimez des enregistrements. Sinon, ce ne sont que quelques données supplémentaires qui ne seront pas utilisées/touchées. –

+0

@ Marc B - c'était l'une des options que j'ai mentionnées ci-dessus .. Est-ce la bonne façon d'y aller? –

Répondre

1

Si vous ne disposez pas d'un problème avec l'espace, alors vous pouvez facilement ajouter un index unique pour le champ TABLE_STRING. Cela créera un index unique pour ce champ qui vous alertera si vous essayez d'ajouter des données en double (opérations d'insertion/mise à jour).

Étant donné que vous avez un grand volume de lignes et que le champ est défini sur VARCHAR (255), le fichier d'index doit être assez volumineux.

Si toutefois vous avez des soucis d'espace, alors vous voudrez peut-être supprimer le TABLE_ID et utiliser le TABLE_STRING comme clé primaire (qui sera unique).

Personnellement, j'ajouterais simplement l'index unique sur le champ TABLE_STRING.

Veuillez noter que l'opération d'ajout de l'index peut échouer initialement si vous avez déjà des lignes ayant un contenu en double pour ce champ. Une bonne pratique consiste à vérifier d'abord s'il existe des données en double dans ce champ.

HTH

0

Comme déjà mentionné, vous devez créer un index sur UNIQUETABLE_STRING. Vous devriez également vous pencher sur le partitionnement, car cela améliorera les performances sur les index en ayant des index locaux dans chaque partition.

Questions connexes