MySQL : Clé primaire et index
4 messages
• Page 1 sur 1
-

Toma - WRInaute discret

- Messages: 208
- Inscription: 18 Jan 2006
MySQL : Clé primaire et index
Bonsoir,
Voilà, j'ai un problème tout bête.
J'ai une table avec deux champ SMALLINT : id et id_perso.
À chaque id sera associé plusieurs id_perso et vice versa. Donc ni id, ni id_perso de sera unique.
Par contre je veux qu'un couple (id, id_perso) soit unique. J'ai donc déclaré le couple (id, id_perso) comme clé unique.
Ensuite, comme je vais principalement questionner cette table à partir de id, je me suis dit que ça serait une bonne idée de mettre id comme index. Et là patatras ! J'ai le warning suivant dans phpMyAdmin :
D'ailleurs l'index sur id a "aucune" cardinalité, donc le warning semble être justifié.
Je ne comprends pas car a priori, le fait de déclarer un couple en clé unique ne crée pas un index, non ? Donc pourquoi je n'ai pas le droit de créer un index avec id ?
Étant donné que l'unicité du couple est primordiale, est-ce que la seule façon d'avoir un index sur id est de faire un index sur le couple (id, id_perso) et donc de déclarer (id, id_perso) comme clé primaire ? Je veux bien, mais je trouverais ça dommage de devoir créer un index sur deux champs alors que je n'en ai besoin que sur un seul.
Voilà, j'ai un problème tout bête.
J'ai une table avec deux champ SMALLINT : id et id_perso.
À chaque id sera associé plusieurs id_perso et vice versa. Donc ni id, ni id_perso de sera unique.
Par contre je veux qu'un couple (id, id_perso) soit unique. J'ai donc déclaré le couple (id, id_perso) comme clé unique.
Ensuite, comme je vais principalement questionner cette table à partir de id, je me suis dit que ça serait une bonne idée de mettre id comme index. Et là patatras ! J'ai le warning suivant dans phpMyAdmin :
- Code: Tout sélectionner
La colonne `id` ne devrait pas faire partie à la fois d'une clé unique et d'une clé index
D'ailleurs l'index sur id a "aucune" cardinalité, donc le warning semble être justifié.
Je ne comprends pas car a priori, le fait de déclarer un couple en clé unique ne crée pas un index, non ? Donc pourquoi je n'ai pas le droit de créer un index avec id ?
Étant donné que l'unicité du couple est primordiale, est-ce que la seule façon d'avoir un index sur id est de faire un index sur le couple (id, id_perso) et donc de déclarer (id, id_perso) comme clé primaire ? Je veux bien, mais je trouverais ça dommage de devoir créer un index sur deux champs alors que je n'en ai besoin que sur un seul.
- jcaron
- WRInaute accro

- Messages: 2685
- Inscription: 13 Fév 2004
Re: MySQL : Clé primaire et index
Je ne sais pas comment ça se passe exactement avec mysql, mais avec postgresql, une clef unique (ou primaire, qui est forcément unique) implique la création automatique d'un index (c'est la seule façon efficace d'y arriver de toutes façons, sinon il faudrait parcourir l'ensemble de la table à chaque insertion ou modification pour vérifier que la contrainte est respectée). Et évidemment, s'il y a un index sur deux colonnes A et B, il peut être utilisé pour faire des recherches basées sur A uniquement (il sera éventuellement moins efficace comme index car plus gros, mais bon).
Jacques.
Jacques.
-

k2pi - WRInaute occasionnel

- Messages: 313
- Inscription: 4 Fév 2007
Re: MySQL : Clé primaire et index
Le fait de delcarer clé primaire fait automatiquement un index.
Quand un index est sur plusieurs champs, la façon mysql dont stock l'index (sous forme d'un arbre) te permet de faire des recherche aussi vite sur le 1er champs de l'index multiple.
Donc dans ton cas si ta clé primaire est id, id_perso, tu pourra c'est bon du as en quelque sorte déjà un index sur id.
En revanche ça ne marche pas pour id_perso (dans ce cas alors tu peux faire un index special sur id_perso)
Quand un index est sur plusieurs champs, la façon mysql dont stock l'index (sous forme d'un arbre) te permet de faire des recherche aussi vite sur le 1er champs de l'index multiple.
Donc dans ton cas si ta clé primaire est id, id_perso, tu pourra c'est bon du as en quelque sorte déjà un index sur id.
En revanche ça ne marche pas pour id_perso (dans ce cas alors tu peux faire un index special sur id_perso)
4 messages
• Page 1 sur 1
Lectures recommandées sur ce thème :
- Clé primaire indexée automatiquement sur MySQL???
- [Mysql] Parsing d'une clé + On Duplicate Key
- [mysql] duplicate entry sur une cle qui n'existe pas...
- Index primaire et secondaire?
- Site d'une ecole primaire
- Index et clés primaire sous DBDesigner
- Configurer DNS primaire avec webmin
- Comment configurer les DNS (primaire et secondaire)
- Serveur DNS primaire utilisé comme secondaire !?
- Nom de domaine - Serveur dédié - DNS primaire
- Gestion des langues et des sessions en PHP / MySQL - 02-05-2004
- Google API : guide de développement de l'API Google - 20-09-2002
- Passage à l'heure d'été/hiver sur un forum phpBB - 31-10-2010
- Script de mise en cache des pages (PHP MySQL) - 09-08-2010
- GoogleStats : analyse temps réel des visites de Google sur votre site - 02-10-2002
- Sortie officielle de GoogleStats v2.0 ! - 23-02-2003
- AdSense Tracking : statistiques détaillées sur les clics AdSense - 29-02-2004
- Le WRInaute du moment - 24-10-2006
Consultez la description détaillée des produits ou services de Google suivants : Google Bombing
- Indice de densité
Cet outil vous permet de calculer l'indice de densité d'un mot-clé d'une page web. Il est calculé à la fois pour la balise TITLE, la balise META description et l'ensemble du texte de la page.
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité
