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 :

Différences et optimisations entre deux requêtes


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 66
    Par défaut Différences et optimisations entre deux requêtes
    Salut

    Je dois optimiser une requête qui actuellement s’exécute en .... 19secondes malgré qu'elle soit très simple.

    J'ai du coup fait ma petite requête qui s'exécute en 0.4s ce qui est nettement plus raisonnable seulement voila, je n'ai pas le même nombre de résultats

    Je voudrai savoir si quelqu'un pouvait m'expliquer les réelles différences entre ces deux requêtes. Aussi est ce que la mienne peut suffire malgré le moindre retour (l'ancienne fait elle des doublons?)

    Bref, place au code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT * 
    FROM cc_inscription 
    LEFT JOIN cc_paiement 
    ON cc_paiement.inscription_id = cc_inscription.inscription_id 
    WHERE cc_inscription.course_id=1 
    ORDER BY cc_inscription.inscription_id ASC; 
    (4107 records, 19s execution)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT * 
    FROM cc_inscription, cc_paiement 
    WHERE cc_paiement.inscription_id = cc_inscription.inscription_id 
    AND cc_inscription.course_id=1 
    ORDER BY cc_inscription.inscription_id ASC; 
    (3780 records, 0.400s)
    Si les résultats sont effectivement différents (donc que le LEFT JOIN ne provoque pas de doublons).

    Pourriez vous m'indiquer comment je pourrai l'optimiser histoire qu'elle ne fasse pas 19secondes ?

    Merci beaucoup !

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    rien à voir avec les doublons : la jointure externe renvoie en plus les lignes de la table cc_inscription pour lesquelles il n'existe pas de ligne dans la table cc_paiement qui satisfasse la condition de jointure.

    une telle différence de temps d’exécution est tout de même étrange. Ne manque-t-il pas un index ? il faudrait comparer les deux plans d’exécution.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 66
    Par défaut
    Je doute fort qu'il y ait un quelconque index en effet ... et j'avoue avoir vu ça viteuf en cours sans vraiment savoir ce que c'est ni comment en faire un mais je suis tout à fait preneur si on peut m'expliquer

    Merci pour ta réponse en tout cas

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 66
    Par défaut
    Je re-post du coup désolé j'ai du mal m'exprimer. Pourriez vous m'expliquer comment je pourrai optimiser cette requête avec un système d'index ?

    En ce qui concerne les 'plans d'exécutions' je ne vois pas trop ce dont tu parle. La manière dont sont faites les requêtes ? C'est sous navicat que j'ai ces résultats donc sans passer par un autre langage (de base le script est php mais les temps d’exécutions sont ceux de navicat directement)

  5. #5
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 199
    Billets dans le blog
    1
    Par défaut
    Le problème de performances me semble plutôt venir du cache... Après la première requête, les données sont déjà en cache (la seconde est un sous-ensemble de la première).

    Donc la première, lectures physiques sur le disque, seconde, traitements uniquement en mémoire.

    J'aimerais bien voir ce que ça donne si on les lance dans l'ordre inverse.

    Car un LEFT OUTER JOIN n'est pas plus lent qu'un CROSS JOIN combiné à un filtre, on n'est plus à l'époque de Ingres...

  6. #6
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    combien y a-t-il de lignes dans chaque table ?

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

Discussions similaires

  1. [AC-2007] Différence entre deux requètes
    Par leridant dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 28/11/2013, 16h29
  2. Différence entre deux "requêtes"
    Par zaventem dans le forum Développement
    Réponses: 3
    Dernier message: 16/03/2009, 12h01
  3. Différence de fonctionnement entre deux animations
    Par jpboogie dans le forum Flash
    Réponses: 3
    Dernier message: 09/10/2006, 10h32
  4. Différence entre deux requêtes
    Par viny dans le forum Langage SQL
    Réponses: 7
    Dernier message: 03/10/2006, 16h28

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