IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

Utiliser un tableau de résultat pour faire une jointure


Sujet :

MS SQL Server

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2007
    Messages : 8
    Points : 6
    Points
    6
    Par défaut Utiliser un tableau de résultat pour faire une jointure
    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

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 249
    Points : 1 745
    Points
    1 745
    Par défaut table temporaire.
    salut,

    Que je comprennes bien ton problème ? Tu as une liste de societe appartenant à la table COMPANY qui represente un sous ensemble de cette table. Cette liste est fournit en parametre d'une procedure stockee.
    Cette procedure doit fournir la liste des contacts de ces societe, est ce bien cela ?

    CONTACT
    CONTACTID | COMPANYID

    Essaye de creer un clustered index sur CONTACTID et COMPANYID ou simplement un INDEX sur CONTACT(COMPANYID).

    Yann

Discussions similaires

  1. [XL-2013] Utilisation d'un tableau pour faire une pyramide des ages
    Par bdathis dans le forum Excel
    Réponses: 2
    Dernier message: 16/09/2014, 09h44
  2. [Templates] Quoi utiliser pour faire une interface graphique rapidement
    Par une_tite_question dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 13/10/2008, 22h35
  3. Quel logiciel utiliser pour faire une belle interface web?
    Par irnbru dans le forum Webdesign & Ergonomie
    Réponses: 7
    Dernier message: 18/10/2006, 09h07
  4. Utilisation d'un thread pour faire une pause.
    Par ropabo dans le forum Concurrence et multi-thread
    Réponses: 5
    Dernier message: 11/06/2006, 14h28
  5. [Debutant(e)]Quel composant utiliser pour faire une grille
    Par elitost dans le forum Composants
    Réponses: 7
    Dernier message: 21/06/2004, 20h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo