Pour votre amour, je ne vais pas tout coller ici, sachez que c'est long et qu'il y a beaucoup de groupes.Comment puis-je améliorer cette requête monstre de jointure multiple?
La structure de la table, je travaille sur, à sa plus compliquée, ressemble à ceci:
tables = Co, Cn, O, A, N;
scheme (simplified):
N(n)-> (1)every other table
A(n)-> (1)(every other table except N
O(n)-> (1)Co, Cn
Cn(n) -> (1)Co
Co(1) -> (1)cn
La partie la plus laborieuse de la requête va creux de la structure comme ça (je suis en train d'obtenir des informations à partir du tableau N, mais aussi des autres):
N join A join O join ((Co join Cn) union (Cn join Co))
Je dois obtenir le contenu de N mais je dois aussi des trucs de Co et Cn mais je dois faire une dépression et O pour les obtenir. Maintenant, cela peut ne pas sembler être une requête énorme, mais N peut également se rapporter à chacune de ces autres tables et j'ai besoin de les obtenir toutes. Disons simplement que je ne peux pas voir le contenu de la requête si je lui fais écho dans l'application. Je rejoins chaque cas séparément (N-> A, N-> O, N-> Cn, etc) et puis les attrape tous avec UNION
À l'heure actuelle, avec près de 200 000 lignes dans N et quelques centaines à près d'un millier dans chacun des autres tableaux, le serveur de base de données et le site Web se bloque lorsque j'essaie d'exécuter la requête. Une solution à laquelle je pensais était d'abandonner les clés étrangères et de faire un champ pour les liens qui va, pour un exemple de N par tous les autres: "A_IdA, O_IdO, Co_IdCo, Cn_IdCn", et le traiter en php; mais je préfère essayer autre chose avant un changement aussi radical dans la conception de la table.
Quelles sont les relations exactes entre les tables? Par exemple, entre «N» et «A», est-ce que «1: 1», «1: n» ou «n: 1»? –
L'instruction select actuelle rendrait les choses beaucoup plus claires. Sûrement l'instruction select pour 6 jointures ne peut pas être ** longue **. – Johan
Je vais essayer de clarifier un peu la situation. – Bogdan