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 :

Problème de conception : Jointure entre deux tables importantes


Sujet :

Requêtes MySQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2007
    Messages : 85
    Points : 43
    Points
    43
    Par défaut Problème de conception : Jointure entre deux tables importantes
    Bonjour,

    Je vous écris car j'ai un petit problème de conception :
    Je dispose de deux tables de 100k enregistrements chacune et contenant entre 70 et 100 colonnes de relation 1/n.

    Le problème est que je les consulte souvent et pour afficher des infos de la première table, j'ai souvent besoin des infos de la seconde... Et pour cela : une jointure s'imposte ! Ce type d'opération me coûte entre 3 et 6 secondes par requête ce qui ralentit considérablement mon application.

    La question est :
    • Dois-je créer une table où les données les plus utilisées y seront présentent (mais risque de redondance ? )
      • ou...
    • Continuer à faire des jointures pour chacunes des requêtes effectées ?


    En vous remerciant d'avance !

  2. #2
    Membre habitué
    Inscrit en
    Septembre 2007
    Messages
    169
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 169
    Points : 149
    Points
    149
    Par défaut
    Je suppose que tu as déjà des index sur toutes les colonnes utilisées pour la jointure.
    Mais sinon, je ne sais pas si ca pourrait aider à choisir la meilleure solution, mais je n'ai pas bien compris la jointure. Quand tu dis entre 70 et 100 colonnes de jointure, tu veux dire que tu as 70 "liens" vers des 70 instances d'une meme autre table ? Enfin si tu pouvais expliquer en quelques mots ces colonnes.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2007
    Messages : 85
    Points : 43
    Points
    43
    Par défaut
    Merci pour la réponse !
    En effet, j'ai déjà esseyé les index sur les Colonnes utilisées dans la jointure... Mais à priori elles ne sont pas correctement utilisées (le explain de la jointure m'indique 1 ligne sur la première colonne et un nombre de ligne equivalent au nombre d'enregistrement pour la seconde... soit 100k enregistrement)

    Ma jointure se fait comme ceci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Table 1 : constituée de 70 colonnes, clefs primaires key1, key2
    Table 2 : constituée de 100 colonnes, clefs primaires key1, key2, key3
    J'ai une relation 1/n pour table1->table2, ce qui peut s'expliquer par la présence d'une 3eme clefs primaire.
    La jointure se fait sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    table1.key1 = table2.key1 AND table2.key1 = table2.key2
    Voilà, j'éspère que ça peut un peu plus t'aider...

    EDIT : Pour vous mettre plus dans le bain admettons que table1 représente un Travail et que table2 représente un compte-rendu.
    Je peux avoir plusieurs compte-rendus pour un travail donné... Mais ces deux tables étant assez conséquentes (beaucoup de colonnes concernées), chaque selection de compte rendu pour un travail donné me prends 2 à 6 secondes !

  4. #4
    Membre habitué
    Inscrit en
    Septembre 2007
    Messages
    169
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 169
    Points : 149
    Points
    149
    Par défaut
    Tite confirmation, la jointure ne serait pas plutot ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    table1.key1 = table2.key1 AND table1.key2 = table2.key2
    Je trouverais cela plus logique.

    Sinon tu peux essayer de mettre une clé primaire unique pour chaque table, cela ferait 2 fois moins de comparaison, et peut être les index seraient utilisées comme cela. Car je pense que c'est surtout du au fait que les index n'ont pas l'air d'etre utilisés que c'est très long, donc si quelqu'un voit une autre solution..

    Sinon tu peux effectivement essayer de garder que les champs principaux dans ces 2 tables, et de créer 2 tables annexes avec les champs supplémentaires, que tu joindrais uniquement en cas de besoin.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2007
    Messages : 85
    Points : 43
    Points
    43
    Par défaut
    Si tout à fait désolé, j'ai tapé celà un peu vite

    Merci de m'avoir accordé de ton temps. Je vais esseyer la solution de la table à donnée redondante... Je sais, c'est pas bien mais bon j'ai pas le choix. La base de donnée est déjà en production et les applicatifs aussi ; donc rajouter un identifiant unique au lieu d'une combinaison de deux reviendrait à tout modifier !

  6. #6
    Membre habitué
    Inscrit en
    Septembre 2007
    Messages
    169
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 169
    Points : 149
    Points
    149
    Par défaut
    Hum je pensais pas forcément redondantes. Toutes les infos qui sont dans tes tables "légères", tu pourrais ne pas les remettre dans les tables annexes.

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 02/03/2014, 12h16
  2. [MySQL] Probléme de jointure entre deux tables
    Par super-java dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 12/06/2008, 14h49
  3. [MySQL] Jointure entre deux tables
    Par Flushovsky dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 03/10/2005, 18h55
  4. PROBLEME DE JOINTURE ENTRE DEUX TABLE
    Par DarkMax dans le forum Langage SQL
    Réponses: 13
    Dernier message: 13/01/2005, 15h11
  5. Jointure entre deux tables et résultat
    Par Asdorve dans le forum Langage SQL
    Réponses: 2
    Dernier message: 02/06/2004, 14h50

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