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 :

requête avec +0


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti Avatar de boisdin
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 56
    Par défaut requête avec +0
    J'ai un requête sous oracle 10g
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select   DATFACT_EMIS,FACTUR,NUMFACT_C,LOGO,DATFACT_DEB,DATFACT_FIN,MTTTC,MTHT,INDFAD,NB_P_RECAP from T_ARC_MAITRE_FAGP
      where CRM='SGP'
      	and REFCLI='1-RX0XKR'
      	and RESTIT='O'
      	and ((DATFACT_EMIS +0) >= to_date('01/01/1996','DD/MM/YYYY') and (DATFACT_EMIS +0) <= to_date('01/12/2006','DD/MM/YYYY'))
       order by DATFACT_EMIS desc;
    j'aimerais savoir ce que fait (DATFACT_EMIS +0)

  2. #2
    Invité
    Invité(e)
    Par défaut
    il additionne zéro avec DATFACT_EMIS.

    C'est pour éviter de prendre l'index sur DATFACT_EMIS ???

  3. #3
    Membre averti Avatar de boisdin
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 56
    Par défaut
    c'est effectivement pour cela, DATFACT_EMIS etant dans la clé primaire alors que les autres champs sont dans un autre index

    Je ne comprends pas pourquoi cette requête fonctionne nettement plus rapidement qu'une requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select /*+index(I_ARC_MAITRE_CLIENT_FAGP)*/  DATFACT_EMIS,FACTUR,NUMFACT_C,LOGO,DATFACT_DEB,DATFACT_FIN,MTTTC,MTHT,INDFAD,NB_P_RECAP from T_ARC_MAITRE_FAGP
      where CRM='SGP'
                and REFCLI='1-RX0XKR'
                and RESTIT='O'
                and ((DATFACT_EMIS) >= to_date('01/01/1996','DD/MM/YYYY') and (DATFACT_EMIS) <= to_date('01/12/2006','DD/MM/YYYY'))
      order by DATFACT_EMIS desc;
    alors que l'index I_ARC_MAITRE_CLIENT_FAGP est justement sur les trois champs recherchés (DATFACT_EMIS, CRM, REFCLI)

  4. #4
    Invité
    Invité(e)
    Par défaut
    les cadors de l'optimisation t'en diront sûrement plus que moi (surtout si tu en dis un peu plus sur ta table...), mais essaie cette clause avec le between :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT /*+index(I_ARC_MAITRE_CLIENT_FAGP)*/  DATFACT_EMIS,FACTUR,NUMFACT_C,LOGO,DATFACT_DEB,DATFACT_FIN,MTTTC,MTHT,INDFAD,NB_P_RECAP FROM T_ARC_MAITRE_FAGP
      WHERE CRM='SGP'
                AND REFCLI='1-RX0XKR'
                AND RESTIT='O'
                AND DATFACT_EMIS between to_date('01/01/1996','DD/MM/YYYY') and to_date('01/12/2006','DD/MM/YYYY')
      ORDER BY DATFACT_EMIS DESC;

  5. #5
    Invité
    Invité(e)
    Par défaut
    Au fait, tes stats sont-elles à jour ?

  6. #6
    Membre averti Avatar de boisdin
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 56
    Par défaut
    Sur ma petite base de test la requête avec (DATFACT_EMIS +0) met 0.021s
    Celle avec between et /*+index(I_ARC_MAITRE_CLIENT_FAGP)*/ met 2.8s
    Celle avec<= et >= et /*+index(I_ARC_MAITRE_CLIENT_FAGP)*/ met 0.023s

    Par contre sur la "grosse" base de prod la différence entre (DATFACT_EMIS +0) et /*+index(I_ARC_MAITRE_CLIENT_FAGP)*/ est de l'ordre d'un dizaine de seconde en faveur du (DATFACT_EMIS +0)

    J'avoue que j'aimerais bien comprendre ces subtilités

  7. #7
    Membre averti Avatar de boisdin
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 56
    Par défaut
    Je ne sais pas si les stats sont à jour...
    comment puis-je le savoir ?

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 68
    Par défaut
    Citation Envoyé par boisdin Voir le message
    J'ai un requête sous oracle 10g
    [...]
    j'aimerais savoir ce que fait (DATFACT_EMIS +0)
    Pour moi, le "+0" est une bidouille héritée des ancienne versions d'Oracle (<=8) de manière à "griller" un index auprès de l'optimiseur "rule". Cela permet au choix de passer par un autre index ou de faire un full scan (ce qui est parfois mieux).

    Pour les versions récente d'Oracle, il vaut mieux laisser oracle décider du bon plan (et pour cela voir des statistiques à jour).
    Quel résultat (performance) as-tu sans hint, sans "+0" mais avec stats jouées ?

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

Discussions similaires

  1. Problème requête avec UNION et ORDER BY
    Par Yann21 dans le forum Langage SQL
    Réponses: 12
    Dernier message: 12/12/2003, 11h02
  2. Requète avec NOT EXISTS
    Par missllyss dans le forum SQL
    Réponses: 2
    Dernier message: 23/09/2003, 15h20
  3. Requête avec l'expression Like
    Par Mvu dans le forum ASP
    Réponses: 3
    Dernier message: 02/09/2003, 09h39
  4. problème de requête avec jointures
    Par tinhat dans le forum Requêtes
    Réponses: 7
    Dernier message: 11/08/2003, 10h33
  5. Problème dans requête avec count()
    Par BadFox dans le forum Requêtes
    Réponses: 3
    Dernier message: 08/07/2003, 18h02

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