|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre du Club
![]() Inscription : août 2009 Messages : 53 ![]() |
Bonjour,
Une question un peu naïve. J'ai une table d'articles et une table d'auteurs. Je lance une requête qui porte sur la première table dont j'extraits un certain nombre d'articles correspondant à une condition donnée. Lors de l'affichage des résultats, j'ai besoin d'afficher non seulement le titre des articles mais aussi le nom de l'auteur. La question : d'un point de vue performances, faut-il mieux que je fasse une seule requête avec une jointure entre les deux tables, ou est-il plus rapide de faire ma requête simplement sur la table des articles, puis autant de requêtes que nécessaire sur les id des auteurs au moment d'afficher les résultats ? J'ai l'impression qu'une jointure coûte assez cher et n'est réellement utile que si la clause WHERE contient des conditions sur les deux tables. Car si je me passe de la jointure, la série de requêtes sur la table des auteurs ne devrait coûter pratiquement rien (clause where sur la clé primaire)... Merci d'avance pour vos éclaircissements... |
|
|
00
|
|
|
#2 |
![]() ![]() |
Oui il faut faire des jointures sans crainte ! C'est l'opération la plus optimisée dans un SGBD.
Et pour que ces jointures soient performantes, il faut bien sûr que les colonnes entrant en jeu dans la condition de jointure (après le ON) soient indexées.
__________________
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 ! |
|
00
|
|
|
#3 |
|
Membre du Club
![]() Inscription : août 2009 Messages : 53 ![]() |
Merci, mais j'aimerais vraiment comprendre la raison à cela...
Pourquoi dans mon cas précis tu penses que la jointure est préférable ? Si j'étais un ordinateur, je ferais dix fois plus de calculs pour faire une jointure et renvoyer N résultats, que pour rechercher N informations directement dans un index en répondant à des requêtes séparées. Est-ce que c'est l'économie sur les temps d'accès à la base qui va faire la différence ? |
|
|
00
|
|
|
#4 | |||||
![]() ![]() |
Citation:
Citation:
X requêtes sont plus lentes qu'une seule. Fais l'expérience ! Avec un faible volume de données, tu ne sentiras peut-être pas beaucoup de différence mais plus le volume de données augmente et plus la différence se fera sentir. De plus, dans ton cas précis... Citation:
auteur_aut (aut_id, aut_nom...) article_art (art_id, art_id_auteur, art_titre...) La requête avec jointure ressemble donc à quelque chose comme ça : Code :
Selon le volume de données et selon la condition, il est possible qu'il n'exécute pas toujours la requête dans le même sens ! Par contre, avec ton système à multiples requêtes, tu lui imposes la manière de faire et il y a fort à parier que ce ne sera pas toujours le moyen le plus rapide ! À lire sur les jointures et sur l'indexation.
__________________
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 ! |
|||||
|
00
|
|
|
#5 |
|
Membre du Club
![]() Inscription : août 2009 Messages : 53 ![]() |
Merci pour cette explication !
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com