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 :

Performance des requêtes


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Inscrit en
    Novembre 2008
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 139
    Par défaut Performance des requêtes
    Bonjour,

    REQ1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from A,B where A.codea =B.code
    REQ2:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from A inner join B on A.codea=B.code
    Y a t-il une différence entre ces deux requêtes du point de vue performance et temps de réponse ?

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 953
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 953
    Par défaut
    Non

  3. #3
    Membre extrêmement actif
    Avatar de islamov2000
    Homme Profil pro
    Ingénieur d'études & developpement en informatique
    Inscrit en
    Septembre 2007
    Messages
    814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études & developpement en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 814
    Billets dans le blog
    6
    Par défaut
    Oui ,il y la difference; sinon pourqoui inventer une nouvelle syntaxe.

  4. #4
    Membre très actif
    Inscrit en
    Novembre 2008
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 139
    Par défaut
    OUI/NON, y a t-il un document qui justifie?

  5. #5
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 135
    Par défaut
    Il ne devrait pas y avoir de différence à l'exécution.

    La syntaxe avec INNER JOIN assure la cohérence avec la syntaxe de xxx OUTER JOIN et CROSS JOIN.
    Par ailleurs, elle permet de mettre en évidence les éléments de la jointure et les séparer des conditions de filtrage, rendant la requête plus lisible.

    En corollaire, dans une requête complexe comportant des jointures entre plusieurs tables, l'obligation de préciser la condition de jointure dans la clause ON de l'instruction INNER JOIN évite l'oubli de cette condition et la création de produits cartésiens
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  6. #6
    Membre Expert
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Par défaut
    Citation Envoyé par al1_24 Voir le message
    Il ne devrait pas y avoir de différence à l'exécution.
    À l'exécution, non, mais au parsing ? Je me suis déjà posé la question, et je n'ai pas encore eu le courage de mettre au point un test, ni de rechercher si quelqu'un a eu le courage de le faire

    La syntaxe avec INNER JOIN assure la cohérence avec la syntaxe de xxx OUTER JOIN et CROSS JOIN.
    Par ailleurs, elle permet de mettre en évidence les éléments de la jointure et les séparer des conditions de filtrage, rendant la requête plus lisible.
    Je plussoie totalement ce point (qui explique aussi ma flemme à mettre au point un test : même si le résultat donne un parsing largement en faveur de la jointure "old school", je n'aurais pas envie d'y passer).

  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 al1_24 Voir le message
    ...
    En corollaire, dans une requête complexe comportant des jointures entre plusieurs tables, l'obligation de préciser la condition de jointure dans la clause ON de l'instruction INNER JOIN évite l'oubli de cette condition et la création de produits cartésiens
    Je peur que elle n'evite rien. Voilà un exemple limite.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT *  
      FROM hr.departments d 
           Join
           hr.locations l 
        On 1 = 1

  8. #8
    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
    La requête est d'abord transformée et ensuite optimisée.
    Faite une trace de l'evenement 10053
    ...
    SQL:******* UNPARSED QUERY IS *******
    SELECT "D"."DEPARTMENT_ID" "DEPARTMENT_ID","D"."DEPARTMENT_NAME" "DEPARTMENT_NAME","D"."MANAGER_ID" "MANAGER_ID","
    D"."LOCATION_ID" "LOCATION_ID","L"."LOCATION_ID" "LOCATION_ID","L"."STREET_ADDRESS" "STREET_ADDRESS","L"."POSTAL_C
    ODE" "POSTAL_CODE","L"."CITY" "CITY","L"."STATE_PROVINCE" "STATE_PROVINCE","L"."COUNTRY_ID" "COUNTRY_ID" FROM "HR"
    ."DEPARTMENTS" "D","HR"."LOCATIONS" "L" WHERE "D"."LOCATION_ID"="L"."LOCATION_ID"
    ...
    Current SQL statement for this session:
    SELECT *
    FROM hr.departments d
    Join
    hr.locations l
    On d.location_id = l.location_id

  9. #9
    Membre Expert Avatar de ojo77
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Décembre 2010
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 680
    Par défaut
    Citation Envoyé par haykelFST Voir le message
    Y a t-il une différence entre ces deux requêtes du point de vue performance et temps de réponse ?
    Non,

    Pour vous en convaincre testez un explain plan avec les deux syntaxes en effectuant une trace 10053.

    Vous verrez qu'oracle réécrit les jointures ANSI comme des jointures non ANSI (en prédicat).

  10. #10
    Membre très actif
    Inscrit en
    Novembre 2008
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 139
    Par défaut Performance des requêtes
    Bonjour,

    Quelle est la requette la plus performante, (1) ou (2)

    (1)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT d.department_id, e.last_name
       FROM departments d LEFT OUTER JOIN employees e
       ON d.department_id = e.department_id
       ORDER BY d.department_id, e.last_name;
    (2)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT d.department_id, e.last_name
       FROM departments d, employees e
       WHERE d.department_id = e.department_id(+)
       ORDER BY d.department_id, e.last_name;

  11. #11
    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
    Quelles réponses précédentes n’étaient pas claires pour vous ?

  12. #12
    Membre très actif
    Inscrit en
    Novembre 2008
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 139
    Par défaut
    j ai pas compris:

    Par exemple Oracle vous recommande (recommandait ?) fortement d'utiliser RAC avec ASM et ce depuis la 10.1 dont l'ASM était fortement buggué

  13. #13
    Membre Expert Avatar de ojo77
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Décembre 2010
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 680
    Par défaut
    Citation Envoyé par haykelFST Voir le message
    j ai pas compris:
    Très rapidement parcequ'on est hors sujet :

    Oracle recommande des trucs.
    Oracle vend des trucs

    Donc quand oracle recommande il peut ne pas être objectif parcequ'il a un intérêt financier à court ou moyen terme à faire utiliser telle ou telle fonctionnalité.

    En clair ce n'est pas parce qu'oracle recommande un truc qu'il faut absolument le faire.

    Fin du HS

Discussions similaires

  1. Mesurer les performances des requêtes Sybase
    Par kenji_getpowered dans le forum Sybase
    Réponses: 0
    Dernier message: 28/09/2011, 17h39
  2. CONSTRAINT FOREIGN KEY et Performance des requêtes
    Par zinzineti dans le forum Administration
    Réponses: 0
    Dernier message: 28/10/2010, 12h27
  3. [AC-2007] ADP sous 2007: performance des requêtes SET FMTONLY
    Par Mafix dans le forum Projets ADP
    Réponses: 7
    Dernier message: 28/05/2010, 14h34
  4. Performance des requêtes - jointure par fonctions
    Par denevers dans le forum PostgreSQL
    Réponses: 0
    Dernier message: 07/12/2007, 15h11

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