Left Join entre une table et une vue distante

Rechercher

Left Join entre une table et une vue distante

Par dums024  -  6 reponses  -  Le 02/11/2011 10:21  -  Editer  - 

Bonjour,

Je me permets de vous exposer mon probleme :

Je possède une table 't_metier' dans une base de données MySQL sur un serveur 'serv1' ou je renseigne des données metiers et l'identifiant de l'interlocuteur. Sur un autre serveur 'serv2', j'ai une autre base MySQL 'grc' avec une table 't_interlocuteur'. Cette table 't_interlocuteur' dépasse les 160 000 enregistrements, j'ai donc décidé de réaliser une vue permettant de limiter les enregistrements à une zone géographique du style

 

CREATE VIEW v_interlocuteur AS
SELECT id_interlocuteur, raisonsociale
FROM t_interlocuteur
WHERE codedepartement= '52'

Depuis mon premier serveur je souhaite realiser cette requete :

SELECT metier1 as 'valeur', raisonsociale as 'libelle'
FROM t_metier
LEFT JOIN v_interlocuteur ON t_metier.id_interlocuteur=v_interlocuteur.id_interlocuteur
WHERE 1

et la j'obtiens un tableau avec toutes mes données métiers et une raisonsociale qui est à nulle en face de toutes mes données métiers

Par contre si je fais cela :

SELECT metier1 as 'valeur', raisonsociale as 'libelle'
FROM t_metier
INNER JOIN v_interlocuteur ON t_metier.id_interlocuteur=v_interlocuteur.id_interlocuteur
WHERE 1

J'obtiens un tableau avec mes données métiers pour lesquels une raisonsociale à été trouvée (ce qui me semble normal...) toutes les données pour lesquels la raison sociale n'a pas été trouvée ne sont pas présentes.

** Question : **

Que dois-je faire au niveau du serveur 'serv2' pour que ma requête Left Join puisse me remonter toutes mes données métiers et les raison sociales lorsqu'elles existent? Si je remplace ma vue par la table t_interlocuteur ca marche mais c'est excessivement lent.... Je ne peux rien faire sur le serv1, mise à part de suggérer à mon prestataire de modifier la requete

Que me conseillez-vous?

Je vous remercie par avance de vos futures réponses...

Arnaud

 

Réponses apportées à cette discussion

Par Cyrano  -  Le 02/11/2011 10:52  -  Haut de page  - 

Je tenterais sur la table directement mais en ajoutant la clause géographique dans la jointure, comme ceci :

SELECT
  metier1       AS 'valeur',
  raisonsociale AS 'libelle'
FROM t_metier AS m
  LEFT JOIN t_interlocuteur AS i ON m.id_interlocuteur = i.id_interlocuteur
                                AND i.codedepartement = 52;

Sans garantie pour autant, j'avoue que j'ai déjà fait des jointures sur des bases différentes, mais jamais sur des serveurs distincts...

 
Par dums024  -  Le 02/11/2011 11:53  -  Haut de page  - 

Bonjour Cyrano,

Merci tout d'abord de t'interresser à mon probleme... Comme precisé je ne peux pas malheureusement modifier la requete du serv1 qui se trouve à l'interieur d'une application que nous avons acheté...

Je pense que mon soucis viens de ma vue...

Cordialement,

Arnaud

 
Par Cyrano  -  Le 02/11/2011 11:57  -  Haut de page  - 

Alors dns ce cas il faudrait voir au niveau des index de la table des interlocuteurs. Peut-être ajouter un index sur la colonne codedepartement pourrait notablement accélérer le processus.

 
Par dums024  -  Le 02/11/2011 12:21  -  Haut de page  - 

Merci Cyrano,

je vais explorer cette solution... mais l'utilisation/modification de la table t_interlocuteur ne doit etre utiliser qu'en dernier recours...

La création d'une vue me semblait être une bonne solution car elle permettait simplement de faire dialoguer mes deux applications

Nouvel élément que je viens de découvrir, l'application sur le serv1 utilise des tables fédérées... je me demande donc si le soucis viendrait pas de la création d'une table fédérée à partir d'une vue. Est ce que cela n'engendrerai pas quelques soucis au niveau de la récupération des données.

 
Par Cyrano  -  Le 03/11/2011 09:58  -  Haut de page  - 

Salut,

disons que la vue peut être intéressante dans certains cas, mais ce n'est pas obligatoirement plus rapide. Il faut bien comprendre en effet que la requête est exécutée à chaque sollicitation de la vue en question, c'est en quelque sorte une table virtuelle. Par ailleurs, les données ne seront par obligatoirement toutes pertinentes dans une vue, il faudra donc y rajouter des clauses de tri. Mais si le choix des index des tables utilisées dans la vue ne sont pas au niveau optimal, ça ne donnera pas un meilleur résultat par rapport à des requêtes directement sur les tables.

Quand au moteur FEDERATED, je ne l'ai jamais utilisé et j'ignore quelles sont ses spécificités, il faudrait voir la documentation sur le sujet parce que je ne saurai pas répondre sur ce point. Éventuellement, il faudrait fouiller dans les archives du forum de MySQL ( ) mais ne perds pas trop de temps dans le forum french, j'y suis quasiment le seul à y répondre là aussi. Il y a des forums spécialisés par moteurs, et pour FEDERATED, c'est .

 
Par dums024  -  Le 07/11/2011 09:16  -  Haut de page  - 

Bonjour,

Merci pour tes precisions... et surtout ton temps consacré à ma problematique, je vais chercher sur les forums en anglais... si je trouve des élèments supplémentaires sur les vues de tables fédérées, j'apporterai une suite à ce post!!

merci bien

Cordialement,

Arnaud

 

Ajouter une réponse à la discussion

Seuls les membres connectés sont autorisés à poster dans les forums !

Identifiez-vous
Join |  ID/MDP? |