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

Requêtes et SQL. Discussion :

Optimisation requête NOT IN


Sujet :

Requêtes et SQL.

  1. #1
    Candidat au Club
    Femme Profil pro
    Gestionnaire de données
    Inscrit en
    Novembre 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Gestionnaire de données
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Optimisation requête NOT IN
    Bonjour à tous,

    J’utilise la requête suivante destinée à faire du publipostage.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT p.id_personne
    FROM personnes AS p INNER JOIN flux AS f ON p.id_personne = f.id_personne
    WHERE p.id_personne Not In (SELECT id_personne FROM query_exclusion)
    AND p.date_reponse IS NULL AND p.reponse IS NULL
    AND p.id_personne In (SELECT id_personne FROM flux WHERE id_document=1) 
    AND p.id_personne Not In (SELECT id_personne FROM flux WHERE id_document=15)
    GROUP BY p.id_personne
    HAVING DateDiff("d",Last(f.date_operation),Date())>=30;

    Mon problème est que comme vous pouvez le voir, celle-ci contient 3 instructions NOT IN. Je sais qu’Access ne sait pas utiliser l’index avec cette instruction. Ma requête est donc très lente à s’exécuter.
    Je voudrais la modifier de façon à supprimer les NOT IN. J’ai pensé à utiliser les jointures. J’ai commencé à faire quelque chose comme ça.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT p.id_personne
    FROM personnes AS p 
    RIGHT JOIN flux f ON p.id_personne = f.id_personne AND f.id_document = 1
    RIGHT JOIN flux f2 ON p.id_personne = f2.id_personne AND f2.id_document <> 5
    WHERE p.date_reponse IS NULL AND p.reponse IS NULL
    Cependant ce n’est pas correct (Syntax error (missing operateur) in query expression). Malgré mes recherches je ne trouve pas la solution. Quelqu’un peut-il m’aiguiller svp ?

    Merci d'avance !

  2. #2
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 690
    Points : 57 226
    Points
    57 226
    Billets dans le blog
    40
    Par défaut
    Bonjour,

    en effet, NOT IN est un boulet

    Avant ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HAVING DateDiff("d",Max(f.date_operation),Date())>=30;
    Max me semble meilleur que Last. On ne sait pas trop ce que retourne Last, le dernier saisi mais est-ce que le dernier saisi correspond à la date maxi si on ne saisit pas dans l'ordre. Et puis y'en a qui après avoir secoué un peu les tables n'ont toujours pas retrouvé leur petit dernier

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT T1.id FROM T1
    WHERE T1.id NOT IN (SELECT T2.id FROM T2)

    est équivalent à:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     SELECT T1.Id FROM T1 LEFT JOIN T2
    ON T1.id=T2.id
    WHERE T2.id is Null

    ça devrait te donner des piste.

    à+

Discussions similaires

  1. Optimisation requête jointure NOT IN
    Par pop_up dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 05/11/2014, 16h41
  2. [ASE 12.5.4] Optimisation requête + not existes
    Par dngaya dans le forum Adaptive Server Enterprise
    Réponses: 3
    Dernier message: 09/01/2010, 14h19
  3. Optimisation requête NOT IN
    Par ninikkhuet dans le forum Requêtes
    Réponses: 4
    Dernier message: 04/01/2010, 17h30
  4. Optimiser requête utilisant NOT IN
    Par Neilos dans le forum Langage SQL
    Réponses: 5
    Dernier message: 11/08/2005, 14h24
  5. optimisation requête SQL!!! help!!
    Par anathem62 dans le forum Requêtes
    Réponses: 2
    Dernier message: 24/05/2004, 16h26

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