4

Une contrainte unique est-elle un index par défaut? Si ce n'est pas le cas, une contrainte unique a-t-elle les mêmes performances qu'une colonne indexée lorsqu'elle l'utilise dans la clause SELECT ... WHERE?Contrainte unique dans MySQL

Merci

Répondre

4

Une contrainte unique est nécessairement un indice. Vous le définissez normalement comme "UNIQUE INDEX". Un index serait nécessaire dans tous les cas pour implémenter efficacement une contrainte unique, donc en avoir un n'est pas un inconvénient.

2

Une contrainte est en fait très différent d'un indice: Il dit juste que MySQL est censé assurer l'unicité pour vous. Cependant, un index (bien qu'il puisse être unique) concerne l'ordre physique sur votre disque dur, ou des structures supplémentaires (généralement un arbre) qui permettent une recherche efficace sur la colonne. Vous pouvez cependant confondre tout cela avec des clés primaires qui définissent un index unique (généralement en cluster).

+0

alors disons dans ma table j'ai une colonne "email", et je fais plusieurs fois la requête "select * from tbl où email comme 'something'". Cette colonne est une colonne unique, mais ce n'est pas la clé primaire. Alors serait-ce mieux pour la performance que je l'indexe? –

+0

@Kai: Oui, un index améliorera les performances lors de la lecture des données (l'écriture des données peut être entravée). Une contrainte unique signifie uniquement que pour toutes les lignes de la table, les valeurs des colonnes avec des contraintes uniques définies pour elles seront uniques - aucune valeur de deux colonnes d'e-mail ne sera identique. –

1

Une contrainte unique est un moyen d'exprimer le fait que quelque chose (comme une combinaison de valeurs d'attributs) doit être unique dans le cadre d'une relation entière ("table")).

C'est au niveau de la conception LOGIQUE.

Un index est un moyen potentiellement utile pour aider à imposer une telle contrainte.

C'est au niveau de la conception PHYSIQUE.

Certains produits SGBD peuvent déduire certaines constructions de conception physique, telles que la présence d'un index, de la présence de certaines constructions de conception logique, telles qu'une contrainte UNIQUE. D'autres pourraient ne pas.

1

UNIQUE est en fait une contrainte sur un index, donc oui, UNIQUE implique qu'il existe un index sur le champ sur lequel vous appliquez l'unicité.

+0

alors maintenant je suis confus à nouveau, dois-je mettre dans ma table de créer ce qui suit: unique (email), ou: index unique (email)? –

0

Vérifiez la contrainte de clé primaire avant de commencer à utiliser des contraintes uniques.

Une contrainte de clé primaire revient à déclarer une contrainte unique et une contrainte non nulle. S'il y a plus d'une colonne dans la clé primaire, chaque colonne obtient une contrainte non nulle, mais la contrainte unique s'applique à toutes les colonnes prises ensemble.

Lorsque vous déclarez une clé primaire, le SGBD crée un index pour vous. Vous pouvez supprimer l'index si vous le souhaitez, mais vous obtiendrez d'horribles performances lorsque le SGBD effectuera des analyses de table pour vérifier l'unicité.

Les contraintes de clé primaire imposent l'intégrité de l'entité, tandis que les contraintes REFERENCES (clé étrangère) appliquent l'intégrité référentielle. Ensemble, ils contribuent grandement à assurer l'intégrité des données.

Questions connexes