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

Administration MySQL Discussion :

MyIsam, clés étrangères et index


Sujet :

Administration MySQL

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2005
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2005
    Messages : 12
    Points : 16
    Points
    16
    Par défaut MyIsam, clés étrangères et index
    Bonjour,

    Je sais que MyIsam ne gère pas de vraies clés étrangères, donc pas la peine de faire le Troll

    Je me demande si une clé "étrangère" doit toujours être mise en Index (ou en unique suivant la relation entre les deux tables) ?
    Typiquement, il y a des cas où cet index aura une cardinalité très faible. Dans ce cas, faut il quand même mettre la clé en index ou non ?

    Un exemple tout bête : une table Pays, une table commune.
    On ne gère que 3 pays, mais on gère toutes les communes de chacun de ces trois pays. La cardinalité de cle "pays_id" dans la table commune va être de 3 seulement. Ce qui est un très mauvais index par définition. Mais est-ce que si on ne met pas le champs en index ça risque d'être plus lent pour X ou Y raisons ?

    merci par avance des réponses que vous pourrez m'apporter

    D.

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 277
    Points : 11 733
    Points
    11 733
    Par défaut
    Je crois que la réponse est dans la question, l'index que tu cites ne servira effectivement pas à grand-chose. Maintenant, ce n'est pas parce qu'un index existe qu'il est forcément utilisé. Selon les statistiques de la table, l'optimiseur choisira ou non de passer par l'index. Donc, dans la mesure où on considère que l'optimiseur est fiable, créer un index ne nuit pas à la performance des sélections...
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2005
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2005
    Messages : 12
    Points : 16
    Points
    16
    Par défaut
    Effectivement il est probable qu'il ne soit pas utilisé. Mais j'avais peur qu'il y ait encore un autre mécanisme plus ou moins obscure qui aurait fait que sans index, même s'il avait eu une cardinalité faible ça aurait été pire.

    Par contre, l'optimiseur n'est pas fiable, c'est pour ça que je me pose des questions . Je l'ai déjà vu utiliser un index à cardinalité 2 sur une table de quelques quelques dizaines de millier d'enregistrement. Et bien je peux te dire que le disque dur à chauffé pour faire plein d'accès disque inutile à cause de l'index ^^. Donc je me méfie de l'optimiseur. je préfère créer mes tables du mieux possible pour que l'optimiseur ait le moins possible de question à se poser.

    Les recherches que j'ai effectué n'ont pas laissé à penser qu'un index serait utile dans mon cas. Je met donc le sujet en résolu et déconseille de mettre un index sur un champs à faible valeurs différentes, quand bien même ce champs serait une clef étrangère.

    Merci

  4. #4
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 277
    Points : 11 733
    Points
    11 733
    Par défaut
    Juste sur le principe, un index à cardinalité 2 peut être très utile ! Imaginons par exemple une colonne Sexe, dans une table où il y aurait 99% d'hommes et 1% de femmes. Pour toutes les requêtes filtrant sur le sexe féminin, l'index permettra un fort gain de performance !
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  5. #5
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2005
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2005
    Messages : 12
    Points : 16
    Points
    16
    Par défaut
    Oui, mais pour les requetes sur les hommes, si l'optimiseur fait des siennes et décide d'utiliser l'index, alors la lecture des enregistrements se fera en fonction des index et la requète sera très lente. Dans un contexte où on connait les données et que l'on est capable de forcer MySQL à utiliser ou non un Index, ta solution peut en effet être très utile.

    Dans mon cas par contre (CMS / CMF Xaraya) je dois rester générique

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 61
    Points : 34
    Points
    34
    Par défaut
    Placer un index "inutile" peut s'avérer être préjudiciable parfois.

    Même si cet index n'est pas utilisé pour les SELECT (ignoré par MySQL), si on fait un UPDATE de cet index dans une ligne, alors l'index est regénéré, ce qui est très très gourmant et ralentira la requête. Alors qu'on en a même pas besoin de cet index!

+ 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, 16h11
  2. Index et clés étrangères
    Par ouadie99 dans le forum Administration
    Réponses: 3
    Dernier message: 01/12/2008, 19h49
  3. Choix des index dans tables sans clés étrangères ?
    Par ctobini dans le forum Requêtes
    Réponses: 2
    Dernier message: 04/01/2008, 10h56
  4. Réponses: 2
    Dernier message: 28/09/2007, 18h35
  5. Suppression Index, Clés étrangères, etc....
    Par nodule dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 02/11/2004, 10h42

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