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 :

requetes avec jointures provoquant lenteur


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 153
    Par défaut requetes avec jointures provoquant lenteur
    bonjour,
    cette requete provoque un resultat de 21 rows et met plus de 40 secondes
    en traitement sur oracle 10 g

    l utilisation de case a la place de decode accelera t il cette requete
    je ne suis pas developpeur




    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
    select   distinct e.id_expert,
     
                            e.nom ||' '||e.prenom as expert,
     
                            e.adresse_mail,
     
                            e.utilisateur,
     
                            e.mdp,
     
                            (select count(*), case when count(*)=0 then 1 else 0 end
     
                                       from      prisme_p.expert_dossier_cible ec          
     
                                       where   ec.id_exp=e.id_expert) as suppression,
     
                            (select distinct edc.theme_projet
     
                             from     prisme_p.expert_dossier_cible edc
     
                             where  edc.id_exp=e.id_expert) as theme,
     
                            (select  distinct co.nom_coord||' '||co.prenom_coord 
     
                                       from      prisme_p.coordonateur co
     
                                       where   co.id_coord=e.id_coord) as coordonnateur
     
                from      prisme_p.expert e,
     
                            prisme_p.campagne c                           
     
                where   c.id_dispositif=2
     
                            and e.id_coord=5
     
                            and e.id_type_expert=c.id_dispositif
     
                            and e.suppression=0
     
                order by e.nom ||' '||e.prenom

  2. #2
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    (SELECT COUNT(*), CASE WHEN COUNT(*)=0 THEN 1 ELSE 0 END
        FROM pRISME_P.EXPERT_DOSSIER_CIBLE ec
        WHERE ec.id_exp=e.id_expert) AS suppression
    Ne marche pas: too many values

  3. #3
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Bon, visiblement le codeur Adooooooore les distinct.

    Un DISTINCT sur un sous select (qui ne doit ramener qu'une ligne) montre qu'il y a un souci :
    Quelle sont les PK de COORDONATEUR, EXPERT_DOSSIER_CIBLE ?

  4. #4
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    note que les 3 requêtes du SELECT sont exécutées autant de fois qu'il y a de ligne retournée, faudrait voir à utiliser la clause WITH et surtout éviter ce genre d'écriture... il n'y a même pas de jointure avec le FROM

  5. #5
    Membre chevronné Avatar de miloux32
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    545
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 545
    Par défaut
    et personnellement je n'aime pas les count(*)

    En principe si tu fais un count en vrac comme ça (sans champ spécifique) tu peux le remplacer par un count(1) qui du coup ne va plus lire tes champs pour les champs pour les compter , donc moins de lecture de blocks.

  6. #6
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Je ne suis pas d'accord.

    Le select count(colonne) Ok, vu que tu obliges Oracle à lire ce champ même s'il passe par un index qui ne contient pas ce champ.

    Le Select count(*) fait autant de chose que le count(1)

Discussions similaires

  1. Réponses: 5
    Dernier message: 06/02/2007, 13h46
  2. [ADO] Requete avec jointure
    Par okparanoid dans le forum Bases de données
    Réponses: 6
    Dernier message: 08/11/2006, 17h05
  3. recherche aide pour requete avec jointure
    Par nebil dans le forum Requêtes
    Réponses: 5
    Dernier message: 21/08/2006, 17h03
  4. [MySQL] Erreur dans une requête avec jointures
    Par bobic dans le forum Langage SQL
    Réponses: 17
    Dernier message: 03/08/2006, 13h04
  5. requete avec jointure & group by
    Par de LANFRANCHI dans le forum Langage SQL
    Réponses: 9
    Dernier message: 27/07/2004, 14h31

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