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

Langage SQL Discussion :

NOT IN et NOT EXISTS TRES long


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 3
    Points : 2
    Points
    2
    Par défaut NOT IN et NOT EXISTS TRES long
    Bonjour,

    Et merci par avance pour le temps consacré à me répondre

    J'ai une requête un peu complexe:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT bureau.idbureau FROM region,bureau WHERE bureau.idbureau NOT IN 
    (SELECT distinct(bureau.idbureau) FROM region,bureau,etatstock,detailetat 
    WHERE etatstock.idetatstock= detailetat.idetat AND etatstock.idbureau = bureau.idbureau 
    AND bureau.idregion=region.idregion AND dateetatstock between '2009-09-01' AND '2009-09-31') 
    AND bureau.idregion=region.idregion ORDER BY idbureau;
    J'ai un peu plus de 1000 bureaux, mais je ne voudrais afficher que ceux qui n'ont pas effectué leur relevé de réassort au mois de septembre.
    Cette requête fonctionne, mais est TRES, TRES longue.
    J'ai essayé de l'optimiser avec un NOT EXISTS. Ca fonctionne aussi, mais c'est guère plus long.
    Je ne sais pas si utiliser un LEFT OUTER JOIN rendrait cette requete plus rapide. Si c'est le cas, je ne sais même pas faire une requête de ce type.

    Merci de vos réponses.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    Bonjour,

    Quelle est la structure de vos tables?
    Les colonnes utilisées dans les jointures sont elles indexées? (idregion, idbureau, idetat)

    Au passage, renseignez vous sur l'écriture de jointure normalisée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT 
          bureau.idbureau 
    FROM region
    JOIN bureau ON bureau.idregion = region.idregion
    ...

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Tous les champs id sont clef primaires.
    J'ai mis le mcd ci joint pour comprendre les relations


    Mon pb est plus d'arriver à faire le LEFT OUTER JOIN avec cette requete en fait. Enfin, il me semble...


    Merci
    Images attachées Images attachées  

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    Ils sont également clés étrangères dans d'autres.
    Donc, les clés étrangères sont-elles indexées?

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Ben si en fait, je les avaient aussi crées

    Si elles sont primaires, c'est bien inutile de les mettre "index" ?


    Ahhhh.
    J'avait bien effectivement oublié 1 index. La différence est flagrante.

    Merci beaucoup

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    Au passage, si dateetatstock n'est pas indexé, ça peut également être intéressant de le faire.
    Si vous avez la possibilité de consulter les plans d'execution de vos requête, ça donne souvent des pistes pour l'optimisation.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. DELETE et NOT LIKE ou NOT EXISTS
    Par Le gris dans le forum Requêtes
    Réponses: 1
    Dernier message: 07/10/2013, 14h15
  2. [MySQL] Requête sur table de jointure avec not in ou not exists
    Par GueloSuperStar dans le forum Langage SQL
    Réponses: 12
    Dernier message: 08/03/2013, 15h01
  3. NOT IN et NOT EXISTS
    Par rsc dans le forum SQL
    Réponses: 10
    Dernier message: 20/09/2012, 08h06
  4. remplacer NOT IN par NOT EXISTS
    Par Louisa2005 dans le forum SQL
    Réponses: 5
    Dernier message: 25/03/2010, 10h04
  5. [9i] Not in ou not exists
    Par billout9 dans le forum SQL
    Réponses: 9
    Dernier message: 30/10/2007, 09h36

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