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 MySQL Discussion :

Requête très longue à éxécuter


Sujet :

Requêtes MySQL

  1. #1
    Candidat au Club
    Inscrit en
    Avril 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Requête très longue à éxécuter
    Bonjour tout le monde,
    j'utilise php/Mysql v 4.1 pour une application web,pour simplifier , voici la bd :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE TABLE `clients` (
      `ref` int(6) NOT NULL default auto_increment,
      `nom` varchar(30) NOT NULL default '',
      PRIMARY KEY  (`ref`)
    )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE TABLE `evenement` (
      `ref_even` int(6) NOT NULL auto_increment,
      `ref_client_even` int(6) NOT NULL default '',
      `even_titre` varchar(25) NOT NULL default '',
      PRIMARY KEY  (`ref_even`)
    )
    Le probleme que j'ai, c'est que quand je lance cette requette pour voir les client qui ont un "evenement1" comme titre et qui n'ont pas "evenement2" comme titre le temps de reponse est tres tres long.
    La requette :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT DISTINCT * FROM clients INNER JOIN evenement ON clients.ref = evenement.ref_client_even
     AND clients.ref IN ( 
                                                SELECT ref_client_even
                                                FROM evenement
                                                WHERE even_titre = 'evenement1'
                              )
    AND clients.ref  NOT
                                           IN (
                                                SELECT ref_client_even
                                                FROM evenement
                                                WHERE even_titre = 'evenement2'
                                              )


    Merci

  2. #2
    Candidat au Club
    Inscrit en
    Avril 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    personne n'a de reponse ??????????????

  3. #3
    Membre éclairé
    Avatar de gerald2545
    Profil pro
    Inscrit en
    Février 2003
    Messages
    744
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 744
    Points : 773
    Points
    773
    Par défaut
    essaye ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT * FROM clients 
    INNER JOIN evenement 
    ON clients.ref = evenement.ref_client_even
    WHERE even_titre = 'evenement1'
    EXCEPT
    SELECT * FROM clients 
    INNER JOIN evenement 
    ON clients.ref = evenement.ref_client_even
    WHERE even_titre = 'evenement2'
    Est-ce que tu as lu les règles du forum?

  4. #4
    Candidat au Club
    Inscrit en
    Avril 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    merci pour la reponse mais je ne peux pas utiliser EXCEPT elle n'est pa reconu dans ma version

  5. #5
    Membre éprouvé
    Avatar de Sivrît
    Profil pro
    Inscrit en
    Février 2006
    Messages
    953
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2006
    Messages : 953
    Points : 1 249
    Points
    1 249
    Par défaut
    Premièrement, pourquoi faire "INNER JOIN evenement" ? En supprimant ça ainsi que le distinct (qui du coup ne sert à rien) ça devrait aller mieux.

    Et ensuite... ils sont où les indexes ?!? "clients INNER JOIN evenement ON clients.ref = evenement.ref_client_even" quand il y a beaucoup de trucs dans 'evenement', forcément que ça se traine si 'ref_client_even' n'est pas indéxé.

    Ensuite pour améliorer les choses utiliser EXISTS plutôt que IN passerait peut-être mieux (à tenter). Ajouter un indexe composé sur (even_titre, ref_client_even), avec des EXISTS en prime devrait tout changer.

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

Discussions similaires

  1. [AC-2003] Requête très longue sur table liée AS/400
    Par cortek's dans le forum Requêtes et SQL.
    Réponses: 17
    Dernier message: 20/09/2009, 11h28
  2. Requête très longue sur une table très simple
    Par kragenskul dans le forum Requêtes
    Réponses: 6
    Dernier message: 16/06/2009, 14h28
  3. Une requête très longue à l'exécution
    Par mouaa dans le forum Langage SQL
    Réponses: 8
    Dernier message: 30/05/2008, 07h57
  4. Réponses: 4
    Dernier message: 09/12/2005, 08h25

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