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 :
La commande est assez lente, il faut dire que la table temporaire fait 200 millions de lignes et que probe_has_target fait 40 millions de lignes.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 update temp join target on target_id = target_id_temp join probe_has_target on idtarget = target_idtarget and score = score_tmp set gid_tmp = gid, idtarget_tmp = idtarget, idprobe_tmp = probe_idprobe
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
Partager