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

SQL Oracle Discussion :

[optimisation] En terme de rapidité


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Inactif   Avatar de Deallyra
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    1 997
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 1 997
    Par défaut [optimisation] En terme de rapidité
    Bonsoir,

    J'aurais voulu savoir s'il était possible de savoir le temps que mettait une requête à se faire sous Oracle.

    En fait, j'aimerai faire des tests me permettant de savoir si une requête est plus rapide qu'une autre.

    J'ai les deux requêtes suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    SELECT nome, embauche
    FROM li.employes
    WHERE salaire = (
    			SELECT salaire 
    			FROM li.employes 
    			WHERE noe = '&1'
    			) 
    AND indem NOT IN (
    			SELECT indem 
    			FROM li.employes 
    			WHERE noe = '&1'
    			 );
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT NOME, EMBAUCHE
    FROM li.employes a
    WHERE SALAIRE = ( 
    				SELECT SALAIRE 
    				FROM li.employes b 
    				WHERE NOE = &1 
    				AND a.INDEM <> b.INDEM 
    			);
    J'aimerai savoir laquelle de ces deux requêtes est là plus rapide.

    Dans quel cas ? (Est ce qu'à partir d'un certain nombre d'enregistrements, une requête est préférable à l'autre? )

    Merci à vous :3
    *Si la réponse vous convient, n'oubliez pas le tag
    *Exprimez vous dans un français correct; on prend le temps de vous lire, prenez le temps de bien écrire.
    *Et comment on interprète votre code? N'oubliez pas la balise!

    *Pour une mise en page simple avec des divs.
    *Pour faire des formulaires xHTML CSS.

  2. #2
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 38
    Par défaut
    Bonsoir
    Pour le temps d'execution, hormis la mesure empirique je ne vois pas
    Sinon le plan d'execution me semble une bonne méthode pour comparer deux requetes, plan d'execution qui met en valeur le cout en accès. Valeur qui permet d'approcher le temps d'execution prévisionnelle de la requete.
    Pas mieux pour le moment désolé

  3. #3
    Membre Expert

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Par défaut
    Bonjour,

    Pour ma part je dirais la seconde.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT nome, embauche
    FROM li.employes
    WHERE salaire = (
    			SELECT salaire 
    			FROM li.employes 
    			WHERE noe = '&1'
    			) 
    AND indem NOT IN (
    			SELECT indem 
    			FROM li.employes 
    			WHERE noe = '&1'
    			 );
    Ici le SGBD est obligé d'effectuer 3 sélections, et soustraire un ensemble a un autre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT NOME, EMBAUCHE
    FROM li.employes a
    WHERE SALAIRE = ( 
    				SELECT SALAIRE 
    				FROM li.employes b 
    				WHERE NOE = &1 
    				AND a.INDEM <> b.INDEM 
    			);
    Ici le SGBD effectue toujours 3 sélections, mais c'est tout.
    Je dirais donc que l'écart entre les deux requêtes aurait tendance à s'accentuer, je ne suis cependant pas expert Oracle et je peux me tromper.

    Concernant le plan d'exécution, ce n'est pas ce qui prend le plus de ressource, puisqu'il est calculé puis mis en cache. Avec une utilisation intelligente du SGBD, le cache sera utilisé la fois suivante.

  4. #4
    Inactif   Avatar de Deallyra
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    1 997
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 1 997
    Par défaut
    Le problème de la seconde est qu'il s'agit d'une requête corrélée...

    J'ai peur qu'avec un nombre d'enregistrement important, elle ne tienne plus la route.

    Apparemment avec "Set Timing On;" je devrai pouvoir lui demander de m'afficher le temps mit pour l'exécution de la requête...

    Je vous tiens au courant
    *Si la réponse vous convient, n'oubliez pas le tag
    *Exprimez vous dans un français correct; on prend le temps de vous lire, prenez le temps de bien écrire.
    *Et comment on interprète votre code? N'oubliez pas la balise!

    *Pour une mise en page simple avec des divs.
    *Pour faire des formulaires xHTML CSS.

  5. #5
    Membre Expert

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Par défaut
    Citation Envoyé par Deallyra Voir le message
    Le problème de la seconde est qu'il s'agit d'une requête corrélée...
    Ah oui en effet j'avais pas fait attention , le nombre de requête sera donc proportionnel au nombre de tuple présent dans table employees dans la requête 2.
    Jai tendance à éviter au maximum ce type de requête plutôt lourde pour la db.

    Peut-être qu'avec un extrait du MLD et ce que tu cherche à faire on aurait un avis plus critique, tu as ça sous la main ?

    pour calculer le temps d'exécution je pense que cette discussion t'aidera.

  6. #6
    Inactif   Avatar de Deallyra
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    1 997
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 1 997
    Par défaut
    Hum.

    Un extrait du MLD je veux bien mais pour ce qu'il servira...
    (en fait, je n'arrive pas à travailler avec les MLD... Si j'ai un MLD, je dois en faire un MCD pour le comprendre dans son ensemble :3 )

    Heu... J'ai déjà fait le MCD... Ce sera déjà ça... Et je vais tenter de générer automatiquement le MLD ^^
    Pas envie de perdre du temps avec le MLD :s

    ( je n'arrive pas à générer un MLD textuel...)

    -> MCD
    *Si la réponse vous convient, n'oubliez pas le tag
    *Exprimez vous dans un français correct; on prend le temps de vous lire, prenez le temps de bien écrire.
    *Et comment on interprète votre code? N'oubliez pas la balise!

    *Pour une mise en page simple avec des divs.
    *Pour faire des formulaires xHTML CSS.

  7. #7
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Citation Envoyé par Deallyra Voir le message
    Bonsoir,

    J'aurais voulu savoir s'il était possible de savoir le temps que mettait une requête à se faire sous Oracle.

    En fait, j'aimerai faire des tests me permettant de savoir si une requête est plus rapide qu'une autre.
    ...
    Cherchez runstats_pkg sur le site AskTom. Pour la source téléchargez ToolsIuse.

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

Discussions similaires

  1. Dissociation Euresys eVision/OpenCV en termes de rapidité
    Par rastakouair dans le forum OpenCV
    Réponses: 4
    Dernier message: 28/05/2010, 17h01
  2. Optimisation en terme de temps d'exécution
    Par SebastienLeto dans le forum Débuter
    Réponses: 22
    Dernier message: 10/06/2009, 16h50
  3. Optimiser rapidité code
    Par bobosh dans le forum VBA Access
    Réponses: 2
    Dernier message: 28/08/2008, 16h12
  4. Optimisation code pour gagner en rapidité
    Par polodu84 dans le forum MATLAB
    Réponses: 2
    Dernier message: 05/03/2008, 15h32
  5. Optimisation de mémoire / rapiditée
    Par Zenol dans le forum C++
    Réponses: 9
    Dernier message: 25/09/2005, 11h18

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