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

Administration Oracle Discussion :

Demande d'algorithmes de jointure dans Oracle


Sujet :

Administration Oracle

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2014
    Messages : 30
    Points : 19
    Points
    19
    Par défaut Demande d'algorithmes de jointure dans Oracle
    Salut,

    j'aimerais connaître Quels sont les différents algorithmes de jointure utilisés dans Oracle ? (autres que l'algorithme du produit cartésien,Sorge Merge, et par hachage)

    Et Merci pour votre aide !

  2. #2
    Expert éminent
    Avatar de pachot
    Homme Profil pro
    Developer Advocate YugabyteDB
    Inscrit en
    Novembre 2007
    Messages
    1 821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Developer Advocate YugabyteDB
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 821
    Points : 6 443
    Points
    6 443
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Tu as oublié le Nested Loop.


    En bonus quelques plans d'exécution:

    Nested Loop:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    EXPLAINED SQL STATEMENT:
    ------------------------
    select * from DEPT join EMP using(deptno) where sal>=3000
     
    ----------------------------------------------------------------------------
    | Id  | Operation                    | Name    | Starts | A-Rows | Buffers |
    ----------------------------------------------------------------------------
    |   0 | SELECT STATEMENT             |         |      1 |      3 |      13 |
    |   1 |  NESTED LOOPS                |         |      1 |      3 |      13 |
    |*  2 |   TABLE ACCESS FULL          | EMP     |      1 |      3 |       8 |
    |   3 |   TABLE ACCESS BY INDEX ROWID| DEPT    |      3 |      3 |       5 |
    |*  4 |    INDEX UNIQUE SCAN         | PK_DEPT |      3 |      3 |       2 |
    ----------------------------------------------------------------------------
    Sort Merge Join:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    EXPLAINED SQL STATEMENT:
    ------------------------
    select * from DEPT join EMP 
    on (EMP.deptno between DEPT.deptno and DEPT.deptno+10 ) where sal>=3000
     
    -------------------------------------------------------------------------
    | Id  | Operation            | Name | Starts | A-Rows | Buffers |  OMem |
    -------------------------------------------------------------------------
    |   0 | SELECT STATEMENT     |      |      1 |      5 |      14 |       |
    |   1 |  MERGE JOIN          |      |      1 |      5 |      14 |       |
    |   2 |   SORT JOIN          |      |      1 |      3 |       7 |  2048 |
    |*  3 |    TABLE ACCESS FULL | EMP  |      1 |      3 |       7 |       |
    |*  4 |   FILTER             |      |      3 |      5 |       7 |       |
    |*  5 |    SORT JOIN         |      |      3 |      5 |       7 |  2048 |
    |   6 |     TABLE ACCESS FULL| DEPT |      1 |      4 |       7 |       |
    -------------------------------------------------------------------------
    Hash Join:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    EXPLAINED SQL STATEMENT:
    ------------------------
    select * from DEPT join EMP using(deptno)
     
    -----------------------------------------------------------------------
    | Id  | Operation          | Name | Starts | A-Rows | Buffers |  OMem |
    -----------------------------------------------------------------------
    |   0 | SELECT STATEMENT   |      |      1 |     14 |      15 |       |
    |*  1 |  HASH JOIN         |      |      1 |     14 |      15 |  1321K|
    |   2 |   TABLE ACCESS FULL| DEPT |      1 |      4 |       7 |       |
    |   3 |   TABLE ACCESS FULL| EMP  |      1 |     14 |       8 |       |
    -----------------------------------------------------------------------
    Merge Join Cartesian:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    EXPLAINED SQL STATEMENT:
    ------------------------
    select /*+ leading(DEPT EMP) use_merge_cartesian(EMP) */ * from
    DEPT join EMP using(deptno) where sal>3000
     
    -------------------------------------------------------------------------
    | Id  | Operation            | Name | Starts | E-Rows | Buffers |  OMem |
    -------------------------------------------------------------------------
    |   0 | SELECT STATEMENT     |      |      1 |        |      15 |       |
    |   1 |  MERGE JOIN CARTESIAN|      |      1 |      1 |      15 |       |
    |   2 |   TABLE ACCESS FULL  | DEPT |      1 |      4 |       8 |       |
    |   3 |   BUFFER SORT        |      |      4 |      1 |       7 |  2048 |
    |*  4 |    TABLE ACCESS FULL | EMP  |      1 |      1 |       7 |       |
    -------------------------------------------------------------------------
    Cordialement,
    Franck.
    Franck Pachot - Developer Advocate Yugabyte 🚀 Base de Données distribuée, open source, compatible PostgreSQL
    🗣 twitter: @FranckPachot - 📝 blog: blog.pachot.net - 🎧 podcast en français : https://anchor.fm/franckpachot

Discussions similaires

  1. [Oracle] Faire des jointures dans un update
    Par romaintaz dans le forum Langage SQL
    Réponses: 3
    Dernier message: 10/06/2009, 16h01
  2. Optimiser les jointures dans des requêtes
    Par klereth dans le forum PostgreSQL
    Réponses: 12
    Dernier message: 23/04/2005, 17h29
  3. Insertion nouvelle vue dans oracle discoverer
    Par Jean-Matt dans le forum Oracle
    Réponses: 4
    Dernier message: 18/11/2004, 17h24
  4. Encore une jointure sous Oracle pour la route
    Par ebaynaud dans le forum Langage SQL
    Réponses: 15
    Dernier message: 04/11/2004, 11h40
  5. Réponses: 3
    Dernier message: 25/11/2002, 14h15

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