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 :

Requete sql longue a executer


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    178
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 178
    Par défaut Requete sql longue a executer
    Bonjour, je rencontre un problème au niveau du temps d'exécution d'une de mes requêtes.
    En fait cette requete se base sur une vue :
    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
     
    CREATE OR REPLACE FORCE VIEW "DBO"."V_AXE_PROSP_1_3_13" ("PDS_DOMAINE_APPLI", "PDS_NIU", "CAC_NO_LETTRAGE", "PDS_LIBELLE_AFFICHAGE", "PDS_UNITE", "PDS_NATURE_CHAMP", "PDS_TABLE_VALEUR", "CAC_GRPE_CRITERE", "CAC_SGRPE_CRITERE", "CAC_SSGRPE_CRITERE", "DSG_VALEUR_DESCRIPTIF", "DSG_AG_GESTION", "DSG_NO_IMMEUBLE", "DSG_NO_LOT", "DOC") AS 
      SELECT DISTINCT
    		  PDS_Domaine_Appli,
    		  PDS_NIU,
    		  CAC_No_Lettrage,
    		  PDS_Libelle_Affichage,
    		  PDS_Unite,
    		  PDS_Nature_Champ,
    		  PDS_Table_valeur,
    		  CAC_Grpe_Critere,
    		  CAC_SGrpe_Critere,
    		  CAC_SSGrpe_Critere,
    		  DSG_Valeur_descriptif,
    		  DSG_Ag_Gestion,
    		  DSG_No_Immeuble,
    		  DSG_No_Lot
    		 FROM
    		  P_PDES INNER JOIN P_DESG ON PDS_NIU = DSG_NIU
    		  AND DSG_Domaine_Appli = PDS_Domaine_Appli
    		  LEFT OUTER JOIN CRIT_Axes_Contenu ON CAC_NIU = DSG_NIU
    		  LEFT OUTER JOIN B_DOCDESC ON DSG_Ag_Gestion = DCC_Ag_Gestion AND DSG_Domaine_Appli = DCC_Domaine_Appli AND DSG_No_cpte_general = DCC_No_Cpte_General AND DSG_No_Etab_Naiss = DCC_No_Etab_Naiss_Pers AND DSG_No_pers = DCC_No_Pers AND DSG_No_cpte_auxil = DCC_No_Cpte_Aux AND DSG_No_Etab_Nais = DCC_No_Etab_Naiss_Imm AND DSG_NIU = DCC_NIU AND No_Doss_Trx = DCC_No_Doss_Trx AND DSG_No_Immeuble = DCC_No_Imm
          LEFT OUTER JOIN B_DOCUMENT ON DCC_Code_Document = DOC_No_Chrono
         WHERE
    		  CAC_Id_Axe=13
    		  AND PDS_Domaine_Appli = 'Prosp'
          AND DSG_Ag_Gestion = 1
    		  AND DSG_No_Etab_Naiss = 1
    		  AND DSG_No_pers = 3
    		 ;
    Et la requête en question
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT DISTINCT CAC_SSGRPE_CRITERE,CAC_NO_LETTRAGE FROM V_Axe_Prosp_1_3_13 WHERE CAC_GRPE_CRITERE=' ' AND CAC_SGRPE_CRITERE=' ' ORDER BY CAC_NO_LETTRAGE;
    Cette requête ne dois me retourner que 5 enregistrements et elle met pourtant plus d'une minute a s'executer.
    En revanche lorsque je supprime la clause
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    AND DSG_Ag_Gestion = 1
    de ma vue, la requête s'exécute très rapidement mais ne me retourne pas les bons résultats.
    Est ce que quelqu'un aurait une idée sur le probléme?une piste?
    Merci d'avance.

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Il faudrait utiliser des alias de tables pour toutes les colonnes de votre vue afin qu'on puisse y comprendre plus de choses : là on ne sait pas qui appartient à quoi, ce qui est d'autant plus crucial que vous avez des jointures externes.

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    178
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 178
    Par défaut
    voila :
    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
     
    CREATE OR REPLACE FORCE VIEW "DBO"."V_AXE_PROSP_1_3_13" ("PDS_DOMAINE_APPLI", "PDS_NIU", "CAC_NO_LETTRAGE", "PDS_LIBELLE_AFFICHAGE", "PDS_UNITE", "PDS_NATURE_CHAMP", "PDS_TABLE_VALEUR", "CAC_GRPE_CRITERE", "CAC_SGRPE_CRITERE", "CAC_SSGRPE_CRITERE", "DSG_VALEUR_DESCRIPTIF", "DSG_AG_GESTION", "DSG_NO_IMMEUBLE", "DSG_NO_LOT", "DOC") AS 
      SELECT DISTINCT
    		  P_PDES.PDS_Domaine_Appli,
    		  P_PDES.PDS_NIU,
    		  CRIT_Axes_Contenu.CAC_No_Lettrage,
    		  P_PDES.PDS_Libelle_Affichage,
    		  P_PDES.PDS_Unite,
    		  P_PDES.PDS_Nature_Champ,
    		  P_PDES.PDS_Table_valeur,
    		 CRIT_Axes_Contenu. CAC_Grpe_Critere,
    		  CRIT_Axes_Contenu.CAC_SGrpe_Critere,
    		  CRIT_Axes_Contenu.CAC_SSGrpe_Critere,
    		  P_DESG.DSG_Valeur_descriptif,
    		  P_DESG.DSG_Ag_Gestion,
    		  P_DESG.DSG_No_Immeuble,
    		  P_DESG.DSG_No_Lot,
                     B_DOCUMENT.CASE DOC_Nom WHEN NULL then 0 else 1 end AS DOC
    		 FROM
    		  P_PDES INNER JOIN P_DESG ON P_PDES.PDS_NIU = P_DESG.DSG_NIU
    		  AND P_DESG.DSG_Domaine_Appli = P_DESG.PDS_Domaine_Appli
    		  LEFT OUTER JOIN CRIT_Axes_Contenu ON CRIT_Axes_Contenu.CAC_NIU = P_DESG.DSG_NIU
    		  LEFT OUTER JOIN B_DOCDESC ON P_DESG.DSG_Ag_Gestion = B_DOCDESC.DCC_Ag_Gestion AND P_DESG.DSG_Domaine_Appli = B_DOCDESC.DCC_Domaine_Appli AND P_DESG.DSG_No_cpte_general = B_DOCDESC.DCC_No_Cpte_General AND P_DESG.DSG_No_Etab_Naiss = B_DOCDESC.DCC_No_Etab_Naiss_Pers AND P_DESG.DSG_No_pers = B_DOCDESC.DCC_No_Pers AND P_DESG.DSG_No_cpte_auxil = B_DOCDESC.DCC_No_Cpte_Aux AND P_DESG.DSG_No_Etab_Nais = B_DOCDESC.DCC_No_Etab_Naiss_Imm AND P_DESG.DSG_NIU = B_DOCDESC.DCC_NIU AND P_DESG.No_Doss_Trx = B_DOCDESC.DCC_No_Doss_Trx AND P_DESG.DSG_No_Immeuble = B_DOCDESC.DCC_No_Imm
          LEFT OUTER JOIN B_DOCUMENT ON B_DOCDESC.DCC_Code_Document = B_DOCUMENT.DOC_No_Chrono
         WHERE
    		  CRIT_Axes_Contenu.CAC_Id_Axe=13
    		  AND P_DESG.PDS_Domaine_Appli = 'Prosp'
                      AND P_DESG.DSG_Ag_Gestion = 1
    		  AND P_DESG.DSG_No_Etab_Naiss = 1
    		  AND P_DESG.DSG_No_pers = 3
    		 ;

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Une remarque, votre jointure externe sur CRIT_Axes_Contenu s'est tranformée en jointure forte à cause du where.

    Est-ce que cette jointure externe est nécessaire ?

    Ensuite il faudrait la liste des index de la table P_DESG qui est massivement filtrée.

    Enfin il nous faut les plans d'exécution de votre requête (avec et sans la condition).

  5. #5
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    178
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 178
    Par défaut
    La jointure avec crit_axe_contenu est nécessaire, concernant les plan d'exécution comment puis-je les récupérer?
    Et voici ma clé primaire sur la table p_desg :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    PRIMARY KEY ("DSG_NO_IMMEUBLE", "DSG_NO_LOT", "DSG_NIU", "DSG_AGGEST", "DSG_MANDAT", "NO_DOSS_TRX", "DSG_AG_GESTION", "DSG_DOMAINE_APPLI", "DSG_NO_CPTE_GENERAL", "DSG_NO_ETAB_NAISS", "DSG_NO_PERS", "DSG_NO_CPTE_AUXIL", "DSG_NO_ETAB_NAIS")

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Je me doute bien que la jointure est nécessaire, je parlais de son caractère externe ! C'est écrit comme étant une jointure externe mais c'est exécuté comme étant une jointure forte.
    Donc soit :
    1. le caractère externe n'est pas nécessaire et vous pourrez remplacer le LEFT OUTER JOIN par un INNER JOIN
    2. le caractère externe est nécessaire et il faudra monter le prédicat CRIT_Axes_Contenu.CAC_Id_Axe=13 au niveau de la jointure.

    Le second choix peut modifier le résultat de la vue.

    Ensuite votre PK, c'est impressionnant mais probablement pas très efficace.
    Est-ce qu'on peut avoir la structure complète de vos tables ?

    Pour l'explain plan, ça dépend si vous avez un outil genre Toad ou SQL*Plus.
    EXPLAIN PLAN FOR <votre requete> pour ce dernier il me semble, faites des recherches si ça ne fonctionne pas.

    Ah et question bonus, quelle est votre version d'Oracle ?

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

Discussions similaires

  1. Comment parser une requete sql sans l'executer
    Par FABFAB125 dans le forum SQL
    Réponses: 2
    Dernier message: 30/11/2007, 17h21
  2. [Connexion BDD Requete SQL] Probleme d'execution
    Par GarsDuCalvados dans le forum VB.NET
    Réponses: 4
    Dernier message: 25/07/2007, 08h22
  3. Requete Sql erreur d'execution 3075
    Par torNAdE dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 18/07/2006, 19h55
  4. [CR8.5] Comment executer ses propres requetes SQL.
    Par caviar dans le forum SAP Crystal Reports
    Réponses: 5
    Dernier message: 26/10/2004, 20h44
  5. pb d'execution d'une requete sql
    Par pit9.76 dans le forum Bases de données
    Réponses: 2
    Dernier message: 26/06/2004, 12h03

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