|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre régulier
![]() Inscription : avril 2004 Messages : 284 ![]() |
Bonjour,
Je suis sous Linux, j'utilise MySQL 5.0. J'ai créé une table temporaire, je souhaite updater certains champs en les joignant à 2 autres tables : ![]() La commande que j'effectue actuellement est : Code :
Je pars du principe que la table temporaire ne doit pas avoir d'index, puisqu'elle doit être parcourue intégralement et que les autres tables nécessitent des index sur les champs servant dans les jonctions. Je souhaiterais donc avoir votre avis sur les points suivants : - une jonction est-elle à votre avis judicieuse dans la mesure où il n'y a pas de clés étrangères dans la table temporaire ? Ne serait-il pas plus judicieux d'utiliser WHERE à la place ? - mon idée de ne pas créer d'index sur la table temporaire tient-elle la route ? Devrais-je créer des index sur chaque champ servant dans la jointure pour toutes les tables (temp incluse) ? - pour accélérer la requête, puis-je utiliser plusieurs process (type threads en Perl ou Java) d'update sur la table temp, ou existe t'il un moyen d'optimiser ceci directement dans MySQL (paramètre de my.cnf, commande MySQL) ? En vous remerciant, C. Tobini |
||
|
|
00
|
|
|
#2 |
![]() ![]() ![]() Cédric DuprezInscription : avril 2002 Messages : 3 823 ![]() |
Bonjour,
Si mes souvenirs sont bons, JOIN tout seul équivaut à un CROSS JOIN (c'est-à-dire un produit cartésien complet). Remplace-le déjà par INNER JOIN ced |
|
|
00
|
|
|
#3 |
|
Membre régulier
![]() Inscription : avril 2004 Messages : 284 ![]() |
Bonjour et merci de la réponse,
Une spécificité de MySQL est que INNER JOIN et CROSS JOIN sont équivalents. Par ailleurs, sans précision, INNER JOIN est employé par défaut, ça ne va pas changer ma requête C. Tobini |
|
|
00
|
|
|
#4 | ||
|
Membre habitué
![]() Inscription : septembre 2002 Messages : 140 ![]() |
Bonjour,
Juste au sujet de la jonction, c'est vrai qu'il vaut mieux utiliser une clause WHERE : Code :
|
||
|
|
00
|
|
|
#5 |
|
Membre régulier
![]() Inscription : avril 2004 Messages : 284 ![]() |
Bonjour et merci de la réponse,
Apparement, il n'y a pas de grande différence entre le WHERE et le JOIN, pour peu que tout soit bien indexé Pour ce qui est de la lenteur de la requête, je me suis aperçu que, utilisant 2 index séparément, un seul était utilisé. J'ai donc créé un index sur 2 colonnes, ce qui ramène le nombre de match par requête à 1, ce que je m'attendais à avoir. La requète matchait en moyenne 16 lignes en n'utilisant qu'un seul index. Merci et bonne journée à tous, C. Tobini |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com