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

Langage SQL Discussion :

Comment éviter les jointure sur plusieurs tables


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 72
    Points : 34
    Points
    34
    Par défaut Comment éviter les jointure sur plusieurs tables
    Bonjour;

    je suis amené à alimenter une table mais pour ce faire j'ai besoin de faire des jointures sur 7 ou 8 tables pour récupérer tous les champs dont j'ai besoin.
    et je sais qu'en termes d'optimisation ce n'est pas fameux surtout quand on a des tables volumineuses.

    y a-t-il une solution pour contourner ça ?

    merci d'avance.

  2. #2
    Membre actif
    Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juillet 2002
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2002
    Messages : 121
    Points : 217
    Points
    217
    Par défaut
    Bonjour,

    Si tu veux éviter les jointures, tu peux intégrer les informations directement dans la table centrale, c'est pas forcément plus mieux.

    - Tu fais péter la volumétrie de ta base.
    - Tu as des informations en double de tous côtés.
    - Si tu dois modifier un attribut externe d'une liaison, plutôt que faire
    un update sur un enregistrement de la table étrangère tu vas peut être
    devoir faire cet update sur des milliers d'enregistrements.

    D'un autre coté, 8 tables ne me parait pas exagéré quand je vois certaines requêtes que j'ai été amené à écrire tout en gardant de très bonnes performances.

    Après, il est important de savoir comment travaille le SGBD sur lequel tu bosses.
    Ça devient un question d'optimisation.

    Il m'est arrivé de faire certaines requêtes qui mettaient plusieurs minutes à s'exécuter, puis à force d'optimisations tomber en dessous de la seconde.

    Je ne sais pas avec quel SGBD tu travailles, mais tu dois surement avoir des instructions d'analyse d'exécution de requête.

    Cordialement.
    Je connais des gens qui ne sont pas aware, il ne sont pas qu courant. il ne sont pas a l'attention de savoir qu'ils existent.
    "J-C Van dam"

  3. #3
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Il ne faut pas avoir peur des jointures, c'est l'opération la plus optimisée dans un SGBDR.
    Du moment que la BDD est correctement modélisée, les types de colonnes judicieusement choisis et les tables correctement indexées, toute requête, même sur des millions de lignes, doit se faire en moins d'une seconde sur un serveur correctement dimensionné.

    surtout quand on a des tables volumineuses
    Combien de lignes par table ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    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 !

  4. #4
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 72
    Points : 34
    Points
    34
    Par défaut
    bonjour;


    mon SGBD est SQLserver et le nombre de lignes dans les tables varie entre un million et 3 millions lignes.

  5. #5
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    C'est pas mal mais pas extraordinaire.
    SQL Server est tout à fait capable de soutenir cette charge.
    Reste le dimensionnement du matériel (ne pas être avare de mémoire vive), la modélisation de la BDD (normaliser au maximum avant de songer à toute dénormalisation), le choix des types de colonnes (clefs primaires et étrangères entières ou à la riguer en CHAR < 4 notamment), l'indexation des tables.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    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 !

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

Discussions similaires

  1. hibernate-criteria : jointure sur plusieurs tables
    Par loic72 dans le forum Hibernate
    Réponses: 9
    Dernier message: 24/09/2007, 17h27
  2. Comment récupéré les données sur plusieurs fenêtres ?
    Par bon4000 dans le forum Windows Forms
    Réponses: 6
    Dernier message: 17/09/2007, 17h58
  3. Réponses: 1
    Dernier message: 14/05/2007, 15h46
  4. comment disposer les relations sur trois tables ?
    Par opeo dans le forum Schéma
    Réponses: 5
    Dernier message: 04/05/2007, 09h55
  5. Comment éviter les doublons dans ma table
    Par einegel dans le forum Bases de données
    Réponses: 3
    Dernier message: 09/11/2004, 12h18

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