Bonjour,
Je cherche à construire une vue à partir de 4 tables, et il me semble que je dois utiliser un subselect.
Or lorsque je construit cette vue et que je l'exécute, le serveur mysql se met à "mouliner", occupe plus de 50% de la CPU... voire beaucoup plus et ne rend pas la main dans un temps humainement raisonnable.
Voici donc le modèle :
Toutes les tables utilisent le moteur InnoDB.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 Table T1 Id Tag T3_Id T4_Id Table T2 Owner_T1Id Collect_T1Id Value Table T3 Id Name Table T4 Id Place
Il apparaît que chaque enregistrement de T2 contient 2 Id de T1.
La clé de mon problème est de construire un select qui me permette de ramener à la fois le T3.Name correspondant au Owner_T1Id et le T3.Name correspondant au T2.Collect_T1Id. Pareil pour le LastName de T4.
J'avais utilisé des subselect mais ça semble conduire au problème évoqué, et ce sur 2 machines, et deux install de mysql complètement différentes.
J'exclue donc à priori un artéfact dû à une mauvaise install.
Le select ressemble à :
Il y a en réalité plus de champ à afficher, mais j'ai isolé ici ce qui posait problème et que je voudrais écrire autrement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 Select T1.Tag, T2.Owner_T1Id, T2.Collect_T1Id (select T3.Name from T3 where T3.Id=T2.Collect_T1Id) as CollectName (select T4.LastName from T4 where (T3.Id=T2.Collect_T1Id and T3.T4_Id=T4.Id) as Place from T1,T2 where T2.Owner_T1Id=T1.Id
Merci de votre aide
Cordialement,
J-L
Partager