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

Interfaces de programmation Oracle Discussion :

Forcer l'utilisation d'un index (hint INDEX)


Sujet :

Interfaces de programmation Oracle

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2010
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Forcer l'utilisation d'un index (hint INDEX)
    Oracle 10g

    PRO*C
    À l'exécution du programme qui contient la requête suivante :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    EXEC SQL
    SELECT /*+ INDEX(COM_REC I1_COM_REC) */ *
      FROM COM_REC
     WHERE DATDEB_COM >= TO_DATE('19000101', 'YYYYMMDD');

    L'index n'est jamais utilisé, on passe systématiquement par un table full scan
    le hint index n'est pas pris en compte.

    SQL*Plus
    À l'exécution de la même requête sous SQL*Plus, on passe bien par l'index :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SQL>set autotrace traceonly explain
    SQL>select /*+ index(com_rec i1_com_rec) */
      2  * from com_rec where datdeb_com >= to_date( '19000101','YYYYMMDD');
     
    Execution Plan
    ----------------------------------------------------------
       0      SELECT STATEMENT Optimizer=CHOOSE (Cost=0 Card=1 Bytes=469)
       1    0   TABLE ACCESS (BY INDEX ROWID) OF 'COM_REC' (TABLE) (Cost=0
               Card=1 Bytes=469)
     
       2    1     INDEX (RANGE SCAN) OF 'I1_COM_REC' (INDEX) (Cost=0 Card=
              1)

    Pourquoi cette différence de comportement entre le PRO*C et SQL*Plus ?

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2009
    Messages : 41
    Points : 28
    Points
    28
    Par défaut
    Bonjour,

    As-tu essayé avec le hint en minuscule?

    Fly.

  3. #3
    Futur Membre du Club
    Inscrit en
    Juillet 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 8
    Points : 9
    Points
    9
    Par défaut Virgule ?
    Essaie de mettre une virgule entre l'alias de la table et le nom de l'index dans le hint, c'est-à-dire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT /*+ INDEX(COM_REC, I1_COM_REC) */ *
      FROM COM_REC
     WHERE DATDEB_COM >= TO_DATE('19000101', 'YYYYMMDD');

Discussions similaires

  1. Réponses: 3
    Dernier message: 11/05/2009, 23h34
  2. Utilisation de awk avec option index et substr
    Par iuchiban dans le forum Linux
    Réponses: 0
    Dernier message: 25/04/2008, 14h02

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