Bonjour,
Nous sommes en train de réaliser un plugin pour un applicatif existant. Cet applicatif permet de gérer 2 entités: les sociétés et les contacts, dans des vues distinctes.
Les 2 tables sql sont:
COMPANY
COMPANYID | ...
CONTACT
CONTACTID | COMPANYID | ...
Si nous partons de la vue qui liste les sociétés, nous pouvons récupérer tous leurs ID (companyid). Ces ID se retrouvent alors dans un tableau.
Le but de la manoeuvre est de choper tous les contacts liés aux sociétés listées et uniquement celles-là (par exemple, suite à une query sur les companies dans l'applicatif)
Pour le moment, nous n'avons pas trouvé d'autre solution que de lire ce tableau, afin de construire le contenu de la parenthèse IN dans notre requête SQL qui donne alors:
SELECT contactid FROM contact WHERE companyid IN (companyid1, companyid2, companyid3,...)
Le problème est que le nb de companyid peut être très élevé. Dans ce cas, la construction de la requête prend 2-3 secondes de trop par rapport au résultat que nous recherchons.
Et le fait que tous les companyid listés dans le tableau n'existent pas forcément dans la table contact, ça alourdit inutilement la requête!
Nous avons essayé de "tuné" du mieux possible cette requête, mais nous n'avons pas vraiment réussi à l'optimiser.
A ce stade, on se demande donc s'il ne serait pas possible par exemple de réaliser une jointure directe avec un tableau de résultat dont l'exécution aproximative serait qqch du style:
SELECT contactid FROM contact INNER JOIN montableau ON contact.companyid = montableau.companyid
Ce qui devrait accélerer sensiblement le processus.
Ou peut-être y a-t-il moyen de construire une table temporaire avec le contenu du tableau, afin de réaliser la requête ci-dessus.
Peut-être qu'on rêve un peu là... Mais ça fait 2 jours qu'on a le nez dans cette requête qu'on n'arrive plus à optimiser, et à mon avis, on ne voit plus clair non plus à force d'être dedans.
C'est pourquoi je sollicite vos avis éclairés
Merci d'avance
Partager