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

Oracle Discussion :

Optimiser une requête SQL


Sujet :

Oracle

  1. #21
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2012
    Messages : 98
    Points : 45
    Points
    45
    Par défaut
    Citation Envoyé par skuatamad Voir le message
    Qu'est ce que ça donne écrit comme ça :
    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
    17
    18
    19
    20
    21
    22
    23
    24
      WITH vj AS (
    select code_produit,
           to_char(NVL(round(sum(QTE_VENDUE)),0),'999G999G999G999',  'nls_numeric_characters='', ''') "Qte Vendue",
           to_char(NVL(round(sum(VALEUR_VENTE)),0) ,'999G999G999G999',  'nls_numeric_characters='', ''') "C.A.H.T",
           to_char(NVL( round(sum(MARGE_HT)),0) ,'999G999G999G999',  'nls_numeric_characters='', ''') "Marge HT",
           to_char(round((sum(VALEUR_VENTE)-sum(VALEUR))*100/nullif(sum(VALEUR_VENTE),0),2),'999G999G999G999D99',  'nls_numeric_characters='', ''') "TAUX"
      from VENTE_JOUR
     where DATE_GENERATION BETWEEN :date AND :date1
     group by code_produit
    ),
           s as (
    select code_produit,
           to_char(NVL(round(sum(QUANTITE) ),0),'999G999G999G999',  'nls_numeric_characters='', ''') "Qte Stock",
           to_char(NVL(round(sum(VALEUR_PRIX_REV) ),0),'999G999G999G999',  'nls_numeric_characters='', ''') "Valeur du stock"
      from STOCK
     where DATE_GENERATION = :date1
     group by code_produit 
    )
    select p.code_produit, p.DESIGNATION,
           vj.*, s.*
      from produit p
      left join vj on vj.code_produit = p.code_produit
      left join s  on  s.code_produit = p.code_produit
     order by NVL("C.A.H.T", 0) DESC
    L'objectif étant de faire les jointures externes sur un nombre limité de lignes.
    Si les filtres sur les dates sont sélectifs, ajoute des index.
    Salut votre dernière requete
    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
    17
    18
    19
    20
    21
    22
    23
    24
      WITH vj AS (
    SELECT code_produit,
           to_char(NVL(round(sum(QTE_VENDUE)),0),'999G999G999G999',  'nls_numeric_characters='', ''') "Qte Vendue",
           to_char(NVL(round(sum(VALEUR_VENTE)),0) ,'999G999G999G999',  'nls_numeric_characters='', ''') "C.A.H.T",
           to_char(NVL( round(sum(MARGE_HT)),0) ,'999G999G999G999',  'nls_numeric_characters='', ''') "Marge HT",
           to_char(round((sum(VALEUR_VENTE)-sum(VALEUR))*100/nullif(sum(VALEUR_VENTE),0),2),'999G999G999G999D99',  'nls_numeric_characters='', ''') "TAUX"
      FROM VENTE_JOUR
     WHERE DATE_GENERATION BETWEEN '01/06/2013' AND '09/06/2013' 
     GROUP BY code_produit
    ),
           s AS (
    SELECT code_produit,
           to_char(NVL(round(sum(QUANTITE) ),0),'999G999G999G999',  'nls_numeric_characters='', ''') "Qte Stock",
           to_char(NVL(round(sum(VALEUR_PRIX_REV) ),0),'999G999G999G999',  'nls_numeric_characters='', ''') "Valeur du stock"
      FROM STOCK
     WHERE DATE_GENERATION = '09/06/2013' 
     GROUP BY code_produit 
    )
    SELECT /*+ GATHER_PLAN_STATISTICS */p.code_produit, p.DESIGNATION,
          vj."Qte Vendue", vj."C.A.H.T",vj."Marge HT",vj."TAUX", s."Qte Stock",s."Valeur du stock"
      FROM produit p
      LEFT JOIN vj ON vj.code_produit = p.code_produit
      LEFT JOIN s  ON  s.code_produit = p.code_produit
     ORDER BY NVL("C.A.H.T", 0) DESC;
    semble plus performant voici les stats:
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    3031 ligne(s) sÚlectionnÚe(s).
     
    SQL>
    SQL> SELECT * FROM TABLE(dbms_xplan.display_cursor(NULL,NULL,'allstats last'));
     
    PLAN_TABLE_OUTPUT
    --------------------------------------------------------------------------------
     
    SQL_ID  4j4vd8bdnrvtg, child number 0
    -------------------------------------
      WITH vj AS ( SELECT code_produit,
    to_char(NVL(round(sum(QTE_VENDUE)),0),'999G999G999G999',
    'nls_numeric_characters='', ''') "Qte Vendue",
    to_char(NVL(round(sum(VALEUR_VENTE)),0) ,'999G999G999G999',
    'nls_numeric_characters='', ''') "C.A.H.T",        to_char(NVL(
    round(sum(MARGE_HT)),0) ,'999G999G999G999',
    'nls_numeric_characters='', ''') "Marge HT",
    to_char(round((sum(VALEUR_VENTE)-sum(VALEUR))*100/nullif(sum(VALEUR_VENT
    E),0),2),'999G999G999G999D99',  'nls_numeric_characters='', ''') "TAUX"
     
    PLAN_TABLE_OUTPUT
    --------------------------------------------------------------------------------
     
      FROM VENTE_JOUR  WHERE DATE_GENERATION BETWEEN '01/06/2013' AND
    '09/06/2013'  GROUP BY code_produit ),        s AS ( SELECT
    code_produit,        to_char(NVL(round(sum(QUANTITE)
    ),0),'999G999G999G999',  'nls_numeric_characters='', ''') "Qte Stock",
          to_char(NVL(round(sum(VALEUR_PRIX_REV) ),0),'999G999G999G999',
    'nls_numeric_characters='', ''') "Valeur du stock"   FROM STOCK  WHERE
    DATE_GENERATION = '09/06/2013'  GROUP BY code_produit ) SELECT /*+
    GATHER_PLAN_STATISTI
     
    Plan hash value: 2896693882
     
     
    PLAN_TABLE_OUTPUT
    --------------------------------------------------------------------------------
     
    --------------------------------------------------------------------------------
     
    ----------------------------------------------------
     
    | Id  | Operation               | Name       | Starts | E-Rows | A-Rows |   A-Ti
     
    me   | Buffers | Reads  |  OMem |  1Mem | Used-Mem |
     
    --------------------------------------------------------------------------------
     
    ----------------------------------------------------
     
    |   0 | SELECT STATEMENT        |            |      1 |        |   3031 |00:00:0
     
    2.46 |   26722 |  26711 |       |       |          |
     
    PLAN_TABLE_OUTPUT
    --------------------------------------------------------------------------------
     
     
    |   1 |  SORT ORDER BY          |            |      1 |   3017 |   3031 |00:00:0
     
    2.46 |   26722 |  26711 |   690K|   486K|  613K (0)|
     
    |*  2 |   HASH JOIN RIGHT OUTER |            |      1 |   3017 |   3031 |00:00:0
     
    2.46 |   26722 |  26711 |   826K|   826K| 1265K (0)|
     
    |   3 |    VIEW                 |            |      1 |   3951 |   3529 |00:00:0
     
    1.35 |   15247 |  15243 |       |       |          |
     
    |   4 |     HASH GROUP BY       |            |      1 |   3951 |   3529 |00:00:0
     
     
    PLAN_TABLE_OUTPUT
    --------------------------------------------------------------------------------
     
    1.34 |   15247 |  15243 |   869K|   869K| 2395K (0)|
     
    |*  5 |      TABLE ACCESS FULL  | STOCK      |      1 |  82997 |  86156 |00:00:0
     
    0.82 |   15247 |  15243 |       |       |          |
     
    |*  6 |    HASH JOIN RIGHT OUTER|            |      1 |   3017 |   3031 |00:00:0
     
    1.11 |   11475 |  11468 |   845K|   845K| 1320K (0)|
     
    |   7 |     VIEW                |            |      1 |   2652 |   2631 |00:00:0
     
    0.30 |    3079 |   3076 |       |       |          |
     
     
    PLAN_TABLE_OUTPUT
    --------------------------------------------------------------------------------
     
    |   8 |      HASH GROUP BY      |            |      1 |   2652 |   2631 |00:00:0
     
    0.28 |    3079 |   3076 |   895K|   895K| 2403K (0)|
     
    |*  9 |       TABLE ACCESS FULL | VENTE_JOUR |      1 |    223K|    234K|00:00:0
     
    0.73 |    3079 |   3076 |       |       |          |
     
    |  10 |     VIEW                | PRODUIT    |      1 |   3017 |   3031 |00:00:0
     
    0.80 |    8396 |   8392 |       |       |          |
     
    |  11 |      HASH GROUP BY      |            |      1 |   3017 |   3031 |00:00:0
     
    0.79 |    8396 |   8392 |  1057K|   940K| 2753K (0)|
     
    PLAN_TABLE_OUTPUT
    --------------------------------------------------------------------------------
     
     
    |  12 |       TABLE ACCESS FULL | VENTES     |      1 |    687K|    820K|00:00:0
     
    0.26 |    8396 |   8392 |       |       |          |
     
    --------------------------------------------------------------------------------
     
    ----------------------------------------------------
     
     
    Predicate Information (identified by operation id):
    ---------------------------------------------------
     
     
    PLAN_TABLE_OUTPUT
    --------------------------------------------------------------------------------
     
       2 - access("S"."CODE_PRODUIT"="P"."CODE_PRODUIT")
       5 - filter("DATE_GENERATION"=TO_DATE(' 2013-06-09 00:00:00', 'syyyy-mm-dd hh2
     
    4:mi:ss'))
     
       6 - access("VJ"."CODE_PRODUIT"="P"."CODE_PRODUIT")
       9 - filter(("DATE_GENERATION"<=TO_DATE(' 2013-06-09 00:00:00', 'syyyy-mm-dd h
     
    h24:mi:ss') AND
     
                  "DATE_GENERATION">=TO_DATE(' 2013-06-01 00:00:00', 'syyyy-mm-dd hh
     
    24:mi:ss')))
     
     
    PLAN_TABLE_OUTPUT
    --------------------------------------------------------------------------------
     
     
     
    49 ligne(s) sÚlectionnÚe(s)
    cependant les lignes ne sont pas ordonnées par ordre descroissant des NVL("C.A.H.T", 0), c'est les produits n'ayant pas de ventes qui sont en tête ensuite vient pas ordre decroissant les produits vendues, d'où vient cette anomalie. aussi les champs sont vides malgré la présence de NVL qui doit me retourner 0 au cas où il n'y aurait pas de données. c'est surement cela qui engendre la première anomalie. merci

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

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Pour l'affichage, il faut mettre les NVL dans la dernière requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nvl(vj."Qte Vendue",0) as "Qte Vendue",....
    Pour le tri je ne vois pas, je ne comprends pas bien la phrase.

    Pour les perfs créez des index sur les dates si les filtres sont sélectifs.

  3. #23
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2012
    Messages : 98
    Points : 45
    Points
    45
    Par défaut
    Citation Envoyé par skuatamad Voir le message
    Pour l'affichage, il faut mettre les NVL dans la dernière requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nvl(vj."Qte Vendue",0) as "Qte Vendue",....
    Pour le tri je ne vois pas, je ne comprends pas bien la phrase.

    Pour les perfs créez des index sur les dates si les filtres sont sélectifs.
    Effectivement j'ai mis pour l'affichage, les NVL dans la dernière requête. Cependant les tri ne sont pas effectuées par ordre decroissant la dernière ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ORDER BY NVL("C.A.H.T", 0) DESC;
    et le constat que je fais c'est l'affichage des produit n'ayant pas de données qui sont en tête de colonne. car je voulais que les lignes s'affiche par par ordre decroissant des C.A.H.T

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

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Probablement un problème lié à la conversion en chaîne de caractère, qu'est ce que ça donne en n'utilisant to_char que lors de la présentation finale :
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
      WITH vj AS (
    SELECT code_produit,
           sum(QTE_VENDUE) "Qte Vendue",
           sum(VALEUR_VENTE) as caht,
           sum(MARGE_HT) "Marge HT",
           (sum(VALEUR_VENTE)-sum(VALEUR))*100/nullif(sum(VALEUR_VENTE),0) "TAUX"
      FROM VENTE_JOUR
     WHERE DATE_GENERATION BETWEEN '01/06/2013' AND '09/06/2013' 
     GROUP BY code_produit
    ),
           s AS (
    SELECT code_produit,
           sum(QUANTITE) "Qte Stock",
           sum(VALEUR_PRIX_REV) "Valeur du stock"
      FROM STOCK
     WHERE DATE_GENERATION = '09/06/2013' 
     GROUP BY code_produit 
    )
    SELECT /*+ GATHER_PLAN_STATISTICS */p.code_produit, p.DESIGNATION,
           to_char(NVL(round(vj."Qte Vendue" ),0),'999G999G999G999',  'nls_numeric_characters='', ''') as "Qte Vendue"
         , to_char(NVL(round(vj.caht),0),'999G999G999G999',  'nls_numeric_characters='', ''') as "C.A.H.T"
         , to_char(NVL(round(vj."Marge HT"),0),'999G999G999G999',  'nls_numeric_characters='', ''') as "Marge HT"
         , to_char(NVL(round(vj."TAUX"),0),'999G999G999G999',  'nls_numeric_characters='', ''') as "TAUX"
         , to_char(NVL(round(s."Qte Stock"),0),'999G999G999G999',  'nls_numeric_characters='', ''') as "Qte Stock"
         , to_char(NVL(round(s."Valeur du stock"),0),'999G999G999G999',  'nls_numeric_characters='', ''') as "Valeur du stock"
      FROM produit p
      LEFT JOIN vj ON vj.code_produit = p.code_produit
      LEFT JOIN s  ON  s.code_produit = p.code_produit
     ORDER BY NVL(vj.caht, 0) DESC;

  5. #25
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2012
    Messages : 98
    Points : 45
    Points
    45
    Par défaut
    Merci a tous de m'avoir aidé, mon problème vient d'être résolus il fallait convertir en nombre pour que le tri puisse s'effectuer. une fois encore merci au membre de ce forum que je trouve par ailleurs comme le meilleur forum francophone pour le développement. chapeau au administrateur de ce site

  6. #26
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    536
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 536
    Points : 1 359
    Points
    1 359
    Par défaut
    Citation Envoyé par sabdoul Voir le message
    comment je pourrai inverser l'ordre des operation c'est à dire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GROUP BY suivi d’un HASH JOIN
    car la syntaxe ne permet pas cela ou c'est moi qui ne sait pas m'y prendre
    aussi je suis obligé d'effectuer des groupages du faites de la présence des fonctions agregat sum... dans le select

    Essayez ceci
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    WITH T AS
    (
    SELECT e.CODE_PRODUIT "Code Produit",e.DESIGNATION "Designation",
    		 to_char(NVL(round(sum(t.QTE_VENDUE)),0),'999G999G999G999',  'nls_numeric_characters='', ''') "Qte Vendue",
    		 to_char(NVL(round(sum(t.VALEUR_VENTE)),0) ,'999G999G999G999',  'nls_numeric_characters='', ''') "C.A.H.T",
    		 to_char(NVL( round(sum(t.MARGE_HT)),0) ,'999G999G999G999',  'nls_numeric_characters='', ''') "Marge HT",
    		 to_char(round((sum(t.VALEUR_VENTE)-sum(t.VALEUR))*100/nullif(sum(t.VALEUR_VENTE),0),2),'999G999G999G999D99',  'nls_numeric_characters='', ''') "TAUX"
    FROM PRODUIT e
         LEFT OUTER JOIN VENTE_JOUR t
              ON(e.CODE_PRODUIT=t.CODE_PRODUIT) AND t.DATE_GENERATION BETWEEN '". $_POST['date'] . "' AND '" . $_POST['date1'] . "'
    GROUP BY e.CODE_PRODUIT,e.DESIGNATION ORDER BY NVL(round(sum(t.VALEUR_VENTE)),0) DESC
    )
    SELECT /*+
            qb_name(main)
            place_group_by(@main(T@main))
           */
           T.*,
           to_char(NVL(round(sum(s.QUANTITE) ),0),'999G999G999G999',  'nls_numeric_characters='', ''') "Qte Stock",
    	   to_char(NVL(round(sum(s.VALEUR_PRIX_REV) ),0),'999G999G999G999',  'nls_numeric_characters='', ''') "Valeur du stock"
    FROM   T
           LEFT OUTER JOIN STOCK s 
                ON(e.CODE_PRODUIT=s.CODE_PRODUIT AND s.DATE_GENERATION ='". $_POST['date1'] . "' )
    GROUP  BY T."Code Produit", T."Designation", T."Qte Vendue", T."C.A.H.T", T."Marge HT", T."TAUX"
    ORDER BY NVL("C.A.H.T", 0) DESC
    Bien Respectueusement
    www.hourim.wordpress.com

    "Ce qui se conçoit bien s'énonce clairement"

  7. #27
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2012
    Messages : 98
    Points : 45
    Points
    45
    Par défaut
    Citation Envoyé par Mohamed.Houri Voir le message
    Essayez ceci
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    WITH T AS
    (
    SELECT e.CODE_PRODUIT "Code Produit",e.DESIGNATION "Designation",
    		 to_char(NVL(round(sum(t.QTE_VENDUE)),0),'999G999G999G999',  'nls_numeric_characters='', ''') "Qte Vendue",
    		 to_char(NVL(round(sum(t.VALEUR_VENTE)),0) ,'999G999G999G999',  'nls_numeric_characters='', ''') "C.A.H.T",
    		 to_char(NVL( round(sum(t.MARGE_HT)),0) ,'999G999G999G999',  'nls_numeric_characters='', ''') "Marge HT",
    		 to_char(round((sum(t.VALEUR_VENTE)-sum(t.VALEUR))*100/nullif(sum(t.VALEUR_VENTE),0),2),'999G999G999G999D99',  'nls_numeric_characters='', ''') "TAUX"
    FROM PRODUIT e
         LEFT OUTER JOIN VENTE_JOUR t
              ON(e.CODE_PRODUIT=t.CODE_PRODUIT) AND t.DATE_GENERATION BETWEEN '". $_POST['date'] . "' AND '" . $_POST['date1'] . "'
    GROUP BY e.CODE_PRODUIT,e.DESIGNATION ORDER BY NVL(round(sum(t.VALEUR_VENTE)),0) DESC
    )
    SELECT /*+
            qb_name(main)
            place_group_by(@main(T@main))
           */
           T.*,
           to_char(NVL(round(sum(s.QUANTITE) ),0),'999G999G999G999',  'nls_numeric_characters='', ''') "Qte Stock",
    	   to_char(NVL(round(sum(s.VALEUR_PRIX_REV) ),0),'999G999G999G999',  'nls_numeric_characters='', ''') "Valeur du stock"
    FROM   T
           LEFT OUTER JOIN STOCK s 
                ON(e.CODE_PRODUIT=s.CODE_PRODUIT AND s.DATE_GENERATION ='". $_POST['date1'] . "' )
    GROUP  BY T."Code Produit", T."Designation", T."Qte Vendue", T."C.A.H.T", T."Marge HT", T."TAUX"
    ORDER BY NVL("C.A.H.T", 0) DESC
    cette requete dur plus que les autres voici les stats
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    3031 ligne(s) sÚlectionnÚe(s).
     
    SQL> select * from table(dbms_xplan.display_cursor(null,null,'allstats last'));
     
    PLAN_TABLE_OUTPUT
    --------------------------------------------------------------------------------
     
    SQL_ID  17a2jdxyhg2d2, child number 0
    -------------------------------------
    WITH T AS ( SELECT e.CODE_PRODUIT "Code Produit",e.DESIGNATION
    "Designation",    to_char(NVL(round(sum(t.QTE_VENDUE)),0),'999G999G999G9
    99',  'nls_numeric_characters='', ''') "Qte Vendue",
    to_char(NVL(round(sum(t.VALEUR_VENTE)),0) ,'999G999G999G999',
    'nls_numeric_characters='', ''') "C.A.H.T",    to_char(NVL(
    round(sum(t.MARGE_HT)),0) ,'999G999G999G999',
    'nls_numeric_characters='', ''') "Marge HT",
    to_char(round((sum(t.VALEUR_VENTE)-sum(t.VALEUR))*100/nullif(sum(t.VALEU
    R_VENTE),0),2),'999G999G999G999D99',  'nls_numeric_characters='', ''')
     
    PLAN_TABLE_OUTPUT
    --------------------------------------------------------------------------------
     
    "TAUX" FROM PRODUIT e      LEFT OUTER JOIN VENTE_JOUR t
    ON(e.CODE_PRODUIT=t.CODE_PRODUIT) AND t.DATE_GENERATION BETWEEN
    '01/06/2013' AND '09/06/2013' GROUP BY e.CODE_PRODUIT,e.DESIGNATION
    ORDER BY NVL(round(sum(t.VALEUR_VENTE)),0) DESC ) SELECT /*+
    qb_name(main) place_group_by(@main(T@main))*/        T.*,
    to_char(NVL(round(sum(s.QUANTITE) ),0),'999G999G999G999',
    'nls_numeric_characters='', ''') "Qte Stock",      to_char(NVL(ro
     
    Plan hash value: 1936823924
     
    --------------------------------------------------------------------------------
     
     
    PLAN_TABLE_OUTPUT
    --------------------------------------------------------------------------------
     
    --------
     
    | Id  | Operation                     | Name       | E-Rows |  OMem |  1Mem | Us
     
    ed-Mem |
     
    --------------------------------------------------------------------------------
     
    --------
     
    |   0 | SELECT STATEMENT              |            |        |       |       |
           |
     
     
    PLAN_TABLE_OUTPUT
    --------------------------------------------------------------------------------
     
    |   1 |  SORT ORDER BY                |            |   2652 |   690K|   486K|  6
     
    13K (0)|
     
    |   2 |   HASH GROUP BY               |            |   2652 |  1049K|   932K| 12
     
    63K (0)|
     
    |*  3 |    HASH JOIN OUTER            |            |  55709 |   951K|   951K| 12
     
    99K (0)|
     
    |   4 |     VIEW                      |            |   2652 |       |       |
           |
     
    PLAN_TABLE_OUTPUT
    --------------------------------------------------------------------------------
     
     
    |   5 |      SORT ORDER BY            |            |   2652 |   478K|   448K|  4
     
    24K (0)|
     
    |   6 |       HASH GROUP BY           |            |   2652 |   997K|   939K| 12
     
    17K (0)|
     
    |   7 |        VIEW                   |            |     50M|       |       |
           |
     
    |   8 |         HASH GROUP BY         |            |     50M|    56M|  3695K|
     
    PLAN_TABLE_OUTPUT
    --------------------------------------------------------------------------------
     
    66M (0)|
     
    |*  9 |          HASH JOIN RIGHT OUTER|            |     50M|    23M|  3873K|
    28M (0)|
     
    |* 10 |           TABLE ACCESS FULL   | VENTE_JOUR |    223K|       |       |
           |
     
    |  11 |           TABLE ACCESS FULL   | VENTES     |    687K|       |       |
           |
     
     
    PLAN_TABLE_OUTPUT
    --------------------------------------------------------------------------------
     
    |* 12 |     TABLE ACCESS FULL         | STOCK      |  82997 |       |       |
           |
     
    --------------------------------------------------------------------------------
     
    --------
     
     
    Predicate Information (identified by operation id):
    ---------------------------------------------------
     
       3 - access("T"."Code Produit"="S"."CODE_PRODUIT")
     
    PLAN_TABLE_OUTPUT
    --------------------------------------------------------------------------------
     
       9 - access("CODE_PRODUIT"="T"."CODE_PRODUIT")
      10 - filter(("T"."DATE_GENERATION"<=TO_DATE(' 2013-06-09 00:00:00',
                  'syyyy-mm-dd hh24:mi:ss') AND "T"."DATE_GENERATION">=TO_DATE(' 201
     
    3-06-01
     
                  00:00:00', 'syyyy-mm-dd hh24:mi:ss')))
      12 - filter("S"."DATE_GENERATION"=TO_DATE(' 2013-06-09 00:00:00',
                  'syyyy-mm-dd hh24:mi:ss'))
     
    Note
    -----
     
    PLAN_TABLE_OUTPUT
    --------------------------------------------------------------------------------
     
       - Warning: basic plan statistics not available. These are only collected when
     
    :
     
           * hint 'gather_plan_statistics' is used for the statement or
           * parameter 'statistics_level' is set to 'ALL', at session or system leve
     
    l
     
     
     
    56 ligne(s) sÚlectionnÚe(s).

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Optimiser une requête sql
    Par doudou8mc dans le forum Langage SQL
    Réponses: 3
    Dernier message: 01/04/2015, 17h39
  2. Réponses: 4
    Dernier message: 06/08/2014, 18h07
  3. Optimiser une requête SQL
    Par Colonel-Essaid dans le forum Langage SQL
    Réponses: 1
    Dernier message: 02/05/2013, 16h44
  4. Aide pour Simplifier/optimiser une requête SQL
    Par bubu06 dans le forum Requêtes
    Réponses: 3
    Dernier message: 10/05/2012, 18h25
  5. Optimiser une requête SQL d'un moteur de recherche
    Par kibodio dans le forum Langage SQL
    Réponses: 2
    Dernier message: 06/03/2005, 20h55

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