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 :

Amélioration d'une requête


Sujet :

Requêtes MySQL

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 323
    Points : 128
    Points
    128
    Par défaut Amélioration d'une requête
    Bonjour à tous,

    ma demande va vous demander de vous intéresser à ma requete (ce n'est pas une question toute bénine comment faire si ou ca) et j'en suis désolé.....

    Alors voila, on me demande de récupérer une liste de données (que je dois ensuite traiter) avec la requête suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    SELECT PRIX AS 'prix', QUANTITE_LIGNE_COMMANDE AS 'qte' 
    FROM commande, ligne_commande, produit_laboratoire, laboratoire 
    WHERE DATE_CREATION_COMMANDE BETWEEN '2009-06-01' AND '2009-06-29' 
    AND NOM_LABORATOIRE like 'Akileine Asepta' 
    AND ligne_commande.NUMERO_COMMANDE = commande.NUMERO_COMMANDE 
    AND ligne_commande.ID_PRODUIT = produit_laboratoire.ID_PRODUIT 
    AND produit_laboratoire.ID_LABORATOIRE = laboratoire.ID_LABORATOIRE
    Elle fonctionne certes mais problème : ma requête dure 6.5s !

    Ma question est donc la suivante, quelles seraient les différentes méthodes pour améliorer en vitesse ma requête ?

    Je vous remercie ceux qui auront le courage de se pencher sur mon souchi

  2. #2
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 641
    Points
    4 641
    Par défaut
    salut,

    on va déjà réécrire ta requête avec des join :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT PRIX AS 'prix', QUANTITE_LIGNE_COMMANDE AS 'qte' 
    FROM commande
    JOIN ligne_commande ON ligne_commande.NUMERO_COMMANDE = commande.NUMERO_COMMANDE 
    JOIN produit_laboratoire ON ligne_commande.ID_PRODUIT = produit_laboratoire.ID_PRODUIT 
    JOIN laboratoire ON produit_laboratoire.ID_LABORATOIRE = laboratoire.ID_LABORATOIRE
    WHERE DATE_CREATION_COMMANDE BETWEEN '2009-06-01' AND '2009-06-29' 
    AND NOM_LABORATOIRE LIKE 'Akileine Asepta'
    ensuite, pourquoi un like ? un '=' devrait suffire non?
    ensuite as tu des index sur certaines colonnes? si oui lesquelles? il en faut au minimum sur tes colonnes qui te servent pour tes jointures

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 323
    Points : 128
    Points
    128
    Par défaut
    Bonjour et merci pour ta réponse.... Pour infos, utiliser les join m'a permis de gagner 0.5secondes. Je vais voir comment les utiliser pour la prochaine fois, merci.

    > ensuite, pourquoi un like ? un '=' devrait suffire non?
    En effet cela convient parfaitement. C'est juste une mauvaise habitude de ma part de toujours utiliser like lorsque je veux comparer des caractères.

    >ensuite as tu des index sur certaines colonnes? si oui lesquelles?
    Il y a quelques minutes encore j'ignorais ce qu'était un index. Si je comprends bien (après une recherche sur le net), c'est un moyen très rapide de travailler sur une ou plusieurs table. Très bien, faut il faire une modification pour faire un index ? Comment puis-je voir si une colonne est indexé ou non ? Puis-je utilisé mes id de la table pour l'indexé ?

    Je suis désolé pour ces questions qui surement pour toi sont complètement débiles

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Juillet 2009
    Messages : 28
    Points : 25
    Points
    25
    Par défaut
    salut, vite fait comme ça :

    Très bien, faut il faire une modification pour faire un index ?
    => oui... un "ALTER TABLE...."
    Mais il suffit de cliquer avec phpMyAdmin, c'est beaucoup plus simple.

    Comment puis-je voir si une colonne est indexé ou non ?
    => Dans la structure de ta table (sous phpMyAdmin) tu trouve cette info.

    Puis-je utilisé mes id de la table pour l'indexé ?
    => Non tu ne peux pas. Tu dois ! Mieux encore, tu dois créer une clé primaire sur tes id, juste une clé primaire (ça inclue l'indexation).

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 323
    Points : 128
    Points
    128
    Par défaut
    Citation Envoyé par neolitec Voir le message
    => Non tu ne peux pas. Tu dois ! Mieux encore, tu dois créer une clé primaire sur tes id, juste une clé primaire (ça inclue l'indexation).
    Ah, donc en somme lorsque je créé une clé primaire, l'indexation (je ne sais pas si ca se dit :p) d'une table se fait automatiquement. Très bien, donc pour répondre à la question à Cybher, oui les tables sont indexés, et tu as join ces tables avec les id (qui sont les index)

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Juillet 2009
    Messages : 28
    Points : 25
    Points
    25
    Par défaut
    Alors c'est parfait. Si ça prend tant de temps, c'est que la base comporte un certain nombre de données déjà j'imagine ^^

  7. #7
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 641
    Points
    4 641
    Par défaut
    salut,

    ça m'étonnerait que toutes tes colonnes utilisées pour joindre tes tables soient indexées... (tu utilises plusieurs colonnes par table exemple pour ligne_commande tu as numero_commande et id_produit)

    si cela n'est pas suffisant tu peux tester en indexant en plus date_creation_laboratoire et nom_laboratoire

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 323
    Points : 128
    Points
    128
    Par défaut
    très bien je te remercie pour ta réponse... Je le saurais pour la prochaine fois

    Merci encore pour vos réponse

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 323
    Points : 128
    Points
    128
    Par défaut
    juste effarant le temps pris pour la requête.... moins de 0.1s... c'est parfait...

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

Discussions similaires

  1. [2012] Aide à l'amélioration d'une requête
    Par MRzaa dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 30/03/2014, 12h08
  2. Amélioration d'une requête
    Par Jefty dans le forum Langage SQL
    Réponses: 13
    Dernier message: 09/06/2012, 15h22
  3. cherche aide pour améliorer le traitement d'une requête
    Par nomade333 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 22/04/2008, 14h15
  4. Amélioration d'une requête
    Par phtpht dans le forum Langage SQL
    Réponses: 3
    Dernier message: 27/07/2006, 12h20
  5. améliorer une requête
    Par papilou86 dans le forum Access
    Réponses: 5
    Dernier message: 22/05/2006, 11h40

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