Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/02/2011, 11h27   #1
Invité de passage
 
Inscription : avril 2008
Messages : 65
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 65
Points : 3
Points : 3
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.
xavier81 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2011, 14h01   #2
Membre habitué
 
Développeur informatique
Inscription : juillet 2002
Messages : 96
Détails du profil
Informations personnelles :
Âge : 29
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : juillet 2002
Messages : 96
Points : 120
Points : 120
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"
Lharuun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2011, 14h01   #3
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 990
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 10 990
Points : 18 241
Points : 18 241
Envoyer un message via MSN à CinePhil
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é.

Citation:
surtout quand on a des tables volumineuses
Combien de lignes par table ?
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2011, 14h40   #4
Invité de passage
 
Inscription : avril 2008
Messages : 65
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 65
Points : 3
Points : 3
bonjour;


mon SGBD est SQLserver et le nombre de lignes dans les tables varie entre un million et 3 millions lignes.
xavier81 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2011, 15h12   #5
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 990
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 10 990
Points : 18 241
Points : 18 241
Envoyer un message via MSN à CinePhil
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 de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h17.


 
 
 
 
Partenaires

Hébergement Web