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é étrangère et index


Sujet :

Requêtes MySQL

  1. #1
    Membre actif Avatar de AdHoc
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 245
    Points : 239
    Points
    239
    Par défaut Clé étrangère et index
    Bonjour,
    avec MySQL 5.0, pouvez me confirmer que l'utilisation d'une clé étrangère dans une table implique obligatoirement la création d'un index sur la colonne (champ)?

    Avec MS SQL Server, il ne me semblait pas que c'était le cas.

    Merci d'avance

  2. #2
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Mai 2007
    Messages : 18
    Points : 13
    Points
    13
    Par défaut
    Oui je confirme j'ai été contraint de le faire =)

  3. #3
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 491
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 491
    Points : 6 045
    Points
    6 045
    Par défaut
    Citation Envoyé par AdHoc
    Bonjour,
    avec MySQL 5.0, pouvez me confirmer que l'utilisation d'une clé étrangère dans une table implique obligatoirement la création d'un index sur la colonne (champ)?

    Avec MS SQL Server, il ne me semblait pas que c'était le cas.

    Merci d'avance
    Il me semble que ça soit obligatoire.
    Ne jamais comparer les fonctionnalités entre SGPBD tu risques de te tromper à plus de 50%.
    Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...

  4. #4
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 906
    Points : 6 031
    Points
    6 031
    Par défaut
    Une recherche sur le forum aurait apporté cette confirmation....

    http://dev.mysql.com/doc/refman/5.0/...nstraints.html
    "Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
    -----------------------
    Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
    Usus magister est optimus

  5. #5
    Membre actif Avatar de AdHoc
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 245
    Points : 239
    Points
    239
    Par défaut
    Merci à tous de cette confirmation, j'en avais besoin.
    Comme je fais des tests simultanés sur les différents environnements (SQL Server et MySQL), cette contrainte m'a vraiment surpris et, en fait, je ne la comprenais pas (ou ne voulais pas?).

    Pour qi130, effectivement c'est même les premières lignes
    15.7.4. Contraintes de clés étrangères FOREIGN KEY

    Depuis la version 3.23.43b, InnoDB respecte les contraintes de clé étrangères.

    La syntaxe des définitions de contraintes de clés étrangères de InnoDB est la suivante :

    [CONSTRAINT symbol] FOREIGN KEY [id] (index_col_name, ...)
    REFERENCES tbl_name (index_col_name, ...)
    [ON DELETE {CASCADE | SET NULL | NO ACTION | RESTRICT}]
    [ON UPDATE {CASCADE | SET NULL | NO ACTION | RESTRICT}]

    Les deux tables doivent être de type InnoDB, dans la table, il doit y avoir un INDEX où les clés étrangères sont listées comme première colonne, dans le même ordre, et dans la table référencée, il doit y avoir un INDEX où les colonnes référencées sont listées comme premières colonnes, dans le même ordre. Les préfixes d'index ne sont pas supportés pour les clés de contrainte.

    InnoDB ne crée pas automatiquement les index nécessaires pour les clés étrangères : vous devez les créer vous-même. Les index sont nécessaires pour accélérer les vérifications de contrainte, et éviter un scan de table.
    On n'a pas idée de mettre ça à sa place ,
    j'ai lu 5,6 fois ce chapitre en zappant systématiquement ces lignes

    Pour berceker united, je vais essayer de m'en souvenir et d'en tenir compte (c'est pas gagné !!!).

  6. #6
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 491
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 491
    Points : 6 045
    Points
    6 045
    Par défaut
    Citation Envoyé par AdHoc
    Merci à tous de cette confirmation, j'en avais besoin.
    Comme je fais des tests simultanés sur les différents environnements (SQL Server et MySQL), cette contrainte m'a vraiment surpris et, en fait, je ne la comprenais pas (ou ne voulais pas?).

    Pour qi130, effectivement c'est même les premières lignes


    On n'a pas idée de mettre ça à sa place ,
    j'ai lu 5,6 fois ce chapitre en zappant systématiquement ces lignes

    Pour berceker united, je vais essayer de m'en souvenir et d'en tenir compte (c'est pas gagné !!!).
    Je pense que si c'est une bonne idée. Ceci permet d'optimiser le moteur de recherche sur les index plutôt que de parcourir toute une table afin de cherche la bonne valeur de référence. Il va chercher les informations dans la table des index.
    Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...

  7. #7
    Membre actif Avatar de AdHoc
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 245
    Points : 239
    Points
    239
    Par défaut
    oui, du coup, maintenant je crée systématiquement des index sur mes clés étrangères quelque soit le SGBD.
    Ca mange un peu de pain, mais le passage de l'un à l'autre se fait presque tout seul.

  8. #8
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 491
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 491
    Points : 6 045
    Points
    6 045
    Par défaut
    T'inquiète pas je m'étais fais avoir aussi il y a longtemps mais maintenant je pars du principe que mysql étant différent sur la manière de travail. J'ai décidé de la faire en total indépendance c'est à dire qu'entre Mysql et SqlServer ils peuvent avoir des structures très différentes. La couche metier de l'application reste la même. C'est trop un casse-tête de faire des requêtes fonctionnant sur différent sgbd.
    Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Liste des clés étrangères non indexées de la base
    Par SheikYerbouti dans le forum Contribuez
    Réponses: 0
    Dernier message: 30/12/2011, 15h11
  2. MyIsam, clés étrangères et index
    Par Squallynou dans le forum Administration
    Réponses: 5
    Dernier message: 15/07/2009, 11h39
  3. index et clef primaire et étrangère
    Par stos dans le forum Requêtes
    Réponses: 2
    Dernier message: 26/09/2006, 08h59
  4. clé étrangère indexé?
    Par soazig dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 06/08/2005, 19h26
  5. Suppression Index, Clés étrangères, etc....
    Par nodule dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 02/11/2004, 09h42

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