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 :

Rapidité : CASE WHEN ou Union


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Février 2003
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 138
    Par défaut Rapidité : CASE WHEN ou Union
    Bonjour

    Je cherche à savoir ce qui est le plus rapide sous Oracle 9 :

    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
     
    select nom,prenom,sum(poids) as score from
    (
    select nom,prenom,10 as poids from Ecv where nom = 'A'
    union all
    select nom,prenom,10 as poids from Ecv where nom LIKE 'A%'
    union all
    select nom,prenom,10 as poids from Ecv where nom LIKE '%A%'
    union all
    select nom,prenom,10 as poids from Ecv where prenom = 'A'
    union all
    select nom,prenom,10 as poids from Ecv where prenom LIKE 'A%'
    union all
    select nom,prenom,10 as poids from Ecv where prennom LIKE '%A%'
    )
    group by nom,prenom
    ou

    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
     
    select nom,prenom,sum(poids) as score from
    (
    select nom,prenom,CASE 
    WHEN nom = 'A' then 10 
    WHEN nom LIKE 'A%' then 10 
    WHEN nom LIKE '%A%' then 10 
    END as poids
    from Ecv
    union all
    select nom,prenom,CASE 
    WHEN prenom = 'A' then 10 
    WHEN prenom LIKE 'A%' then 10 
    WHEN prenom LIKE '%A%' then 10 
    END as poids
    from  Ecv
    )
    group by nom,prenom
    Je sais bien que les resultat de calculs sont différents mais je les pondère dans ma requète normale.

    Je n'arrive pas à voir de différence de temps d'execution au niveau de mon serveur bien que le plan d'execution semble privilegier le case when.

  2. #2
    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
    à priori, c'est pareil

  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
    Vu que c'est différent !!
    Bon, le UNION ALL, tu as x fois les tables, pas de la CASE WHEN.
    Mais vu que le CASE WHEN tu ne gère qu'un seul cas pour les noms et qu'un seul pour les prénoms...

  4. #4
    Membre Expert
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Par défaut
    Le plus rapide à mon avis c'est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT nom,prenom, 
      SUM ( (CASE WHEN nom LIKE '%A%' then 10 else 0 END) +  
                (CASE WHEN prenom LIKE '%A%' then 10 else 0 END)) AS poids
    FROM Ecv
    group by nom,prenom

Discussions similaires

  1. Réponses: 5
    Dernier message: 31/10/2005, 13h25
  2. case/when avec plusieurs valeurs pour le then
    Par Neo41 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 02/09/2005, 15h58
  3. Pb avec case when !
    Par Brice Yao dans le forum Langage SQL
    Réponses: 11
    Dernier message: 05/08/2005, 08h20
  4. Structure CASE WHEN en Interbase
    Par tchaman dans le forum InterBase
    Réponses: 8
    Dernier message: 13/12/2004, 16h18
  5. [SQL] performances Decode ou Case when ?
    Par Yorglaa dans le forum Oracle
    Réponses: 8
    Dernier message: 01/10/2004, 15h50

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