IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

clé primaire composée et index


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 133
    Par défaut clé primaire composée et index
    Bonjour,

    j'ai une table qui fait le lien entre des voitures et des vendeurs

    Voitures_Vendeurs (id_voiture, id_vendeur)

    Voici la structure SQL de la table:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE TABLE IF NOT EXISTS `Voitures_Vendeurs` (
      `id_voiture` smallint(5) unsigned NOT NULL default '0',
      `id_vendeur` tinyint(3) unsigned NOT NULL default '0',
      PRIMARY KEY  (`id_voiture`,`id_vendeur`),
     )
    Ma question: est-il utile de rajouter un index sur id_vendeur (ALTER TABLE Voiture_Vendeur ADD INDEX id_vendeur) ? Vu que id_vendeur fait parti de la clé primaire, je me pose la question.

    MERCI.

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Oui c'est utile, notamment si vous avez à chercher quelles voitures ont été vendues par le vendeur 3.
    En gros, la clé primaire va trier l'index d'abord par id_voiture puis par id_vendeur mais jamais par id_vendeur en premier.
    id_voiture / id_vendeur
    1 / 1
    1 / 5
    1 / 6
    1 / 10
    1 / 13
    2 / 2
    2 / 3
    ...

    Ainsi il est inutile d'ajouter un index sur id_voiture puisque la clé primaire est déjà triée de la sorte mais sur id_vendeur c'est nécessaire pour améliorer les performances des jointures.

    Plus d'infos sur quoi indexer dans cet article de SQLPro.

    Au fait, votre structure suppose qu'une voiture peut être vendue par plusieurs vendeurs ! Vous vendez vos voitures plusieurs fois ? Neuf et occasion ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 133
    Par défaut
    Bonjour et merci pour cette réponse très claire.

    Pour les vendeurs et voitures, j'ai simplement pris un exemple pour la clarté! Le problème réel est d'une complexité légendaire.

    On m'a mis sur un casse tête monumental. Optimiser une BDD de 400 tables. La phase modélisation a été mal gérée et ça se ressent. Des requêtes rocambolesques avec jointures dans tous les sens, et surtout, la moitié des requêtes écrit un résultat temporaire sur disque (ORDER BY et GROUP BY sur des parties d'index, etc...)

    Voila je clos le chapitre lamentation lol.

    En tous ca merci pour la réponse!

  4. #4
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par ionesco Voir le message
    Des requêtes rocambolesques avec jointures dans tous les sens,
    S'il y a 400 tables, c'est normal qu'il y ait des jointures dans tous les sens mais il ne faut pas forcément en avoir peur car les SGBD sont optimisés pour faire des jointures.

    Si vous avez des soucis de reconception de la BDD, vous pouvez vous adresser au forum Schema.

    Bon courage !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 133
    Par défaut
    Merci je m'empresse de faire un tour sur ce forum.

    Je vais d'abord réglé toutes les erreurs flagrantes et revoir le type des données (j'ai vu des bigint(20) ...)

    Merci beaucoup et à la revoyure.

Discussions similaires

  1. Clé primaire composée et index
    Par Sango64 dans le forum Requêtes
    Réponses: 5
    Dernier message: 20/12/2013, 15h42
  2. Réponses: 10
    Dernier message: 10/05/2011, 16h12
  3. Réponses: 2
    Dernier message: 26/10/2005, 19h57
  4. Foreign key sur clé primaire composée
    Par mona dans le forum Oracle
    Réponses: 6
    Dernier message: 13/10/2005, 22h36
  5. clé primaire composée de 2 clés étrangères
    Par Tigresse dans le forum Installation
    Réponses: 5
    Dernier message: 28/07/2003, 14h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo