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

Administration Oracle Discussion :

Index inutilisé ?


Sujet :

Administration Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de ilalaina
    Homme Profil pro
    Inscrit en
    Mai 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2007
    Messages : 341
    Par défaut Index inutilisé ?
    Bonjour à tous.

    Je travaille sur Oracle 8i, optimiser_mode = choose.
    J'ai une colonne ayant environ 10 valeurs différentes sur une table de 6 000 000 d'enregistrements.
    J'ai mis un index normal sur cette colonne et analysé la table, mais Oracle n'utilise jamais l'index dans les plans d'exécutions.
    J'en déduis que Oracle juge mieux de parcourir toute la table au lieu d'utiliser l'index. Dans ce cas quel type d'index devrais-je utiliser?

    Merci d'avance.

  2. #2
    Membre Expert Avatar de fatsora
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 103
    Par défaut
    Bonjour,

    mais ca depend de beaucoup de choses :

    Quelle requete as tu utilisé ?
    (clause where , utilisation de fionction upper ...)


    Combien de ligne tu ramenes ?

    Un full scan n'est pas forcément "dementiel" ....

    En gros Oracle utilisera l'index si tu ramène moins de 20% des lignes

  3. #3
    Membre éclairé Avatar de ilalaina
    Homme Profil pro
    Inscrit en
    Mai 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2007
    Messages : 341
    Par défaut
    Citation Envoyé par fatsora Voir le message
    Quelle requete as tu utilisé ?
    (clause where , utilisation de fionction upper ...)
    Merci de votre réponse.
    Je fais simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from table where statut=2
    Citation Envoyé par fatsora Voir le message
    Combien de ligne tu ramenes ?
    Un full scan n'est pas forcément "dementiel" ....
    En gros Oracle utilisera l'index si tu ramène moins de 20% des lignes
    Maintenant je commence à comprendre, merci. C'est logique que si je ramène les 70% des enregistrements c'est mieux de tout de suite parcourir la table.

    Par contre j'ai compté les enregistrement groupés par la colonne (statut):
    • Pour le statut 2 par exemple : environ 4 000 000 enregistrements
    • Pour le statut 8 : 2 000 enregistrements

    Mais Oracle n'utilise pas l'index ni lors du filtre par statut 2, ni lors d'un filtre par statut 6.

    Ensuite, j'ai un autre index composite : table (col1, col2, col3, statut)
    Lorsque je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select count(*) from table where statut = 2
    Oracle utilise l'index composite en FAST FULL SCAN.

    Pourriez-vous m'expliquer parce que je voudrais vraiment comprendre comment ça marche réellement; ou pourriez-vous me recommander un doc intéréssant.

    Merci bien.

  4. #4
    Membre Expert Avatar de fatsora
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 103

  5. #5
    Membre éclairé Avatar de ilalaina
    Homme Profil pro
    Inscrit en
    Mai 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2007
    Messages : 341
    Par défaut
    Merci pour les docs, et merci de m'avoir apris à pêcher Fatsora

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 750
    Par défaut
    Citation Envoyé par fatsora Voir le message
    Quelle est la clé d'entrée sur le site pour trouver ces docs? car quand je vais sur la page des tutoriels d'oracle je ne retrouve pas ces documents

  7. #7
    Expert confirmé
    Avatar de pachot
    Homme Profil pro
    Developer Advocate YugabyteDB
    Inscrit en
    Novembre 2007
    Messages
    1 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Developer Advocate YugabyteDB
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 822
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Pour le statut 2 par exemple : environ 4 000 000 enregistrements
    Pour le statut 8 : 2 000 enregistrements
    Donc tu souhaite avoir un plan d'exécution différent suivant la valeur.
    Pour celà, il faut 2 choses:

    1. que cette valeur soit un littéral et non une bind variable. Celà semble être le cas dans ton SQL
    2. que CURSOR_SHARING=EXACT, sinon oracle remplace ton littéral par une bind variable

    Est-ce que tu peux vérifier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    show parameter cursor_sharing
    Attention, changer cursor_sharing peut avoir un gros impact sur d'autres requêtes !

    Cordialement,
    Franck.

  8. #8
    Membre éclairé Avatar de ilalaina
    Homme Profil pro
    Inscrit en
    Mai 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2007
    Messages : 341
    Par défaut
    Citation Envoyé par pachot Voir le message
    1. que cette valeur soit un littéral et non une bind variable. Celà semble être le cas dans ton SQL
    2. que CURSOR_SHARING=EXACT, sinon oracle remplace ton littéral par une bind variable
    cursor_sharing est déjà = EXACT pour mon cas, et j'utilise un littéral pas une bind variable dans mon requête ....

  9. #9
    Membre confirmé Avatar de voran
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    242
    Détails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 242
    Par défaut
    Citation Envoyé par pachot Voir le message
    Bonjour,

    Donc tu souhaite avoir un plan d'exécution différent suivant la valeur.
    Pour celà, il faut 2 choses:

    1. que cette valeur soit un littéral et non une bind variable. Celà semble être le cas dans ton SQL
    2. que CURSOR_SHARING=EXACT, sinon oracle remplace ton littéral par une bind variable

    Est-ce que tu peux vérifier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    show parameter cursor_sharing
    Attention, changer cursor_sharing peut avoir un gros impact sur d'autres requêtes !

    Cordialement,
    Franck.
    Sauf erreur de ma part, tu précise cela pour la 8i ?

    Car pour les versions suivantes cela n'est plus censé être vrai.
    Enfin au moins avec la 10g (bind peek variable introduit en 9i bien que perfectible) et "intelligent cursor sharing" and bind peeking en 11g.

  10. #10
    Expert confirmé
    Avatar de pachot
    Homme Profil pro
    Developer Advocate YugabyteDB
    Inscrit en
    Novembre 2007
    Messages
    1 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Developer Advocate YugabyteDB
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 822
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    Citation Envoyé par voran Voir le message
    Car pour les versions suivantes cela n'est plus censé être vrai.
    Enfin au moins avec la 10g (bind peek variable introduit en 9i bien que perfectible) et "intelligent cursor sharing" and bind peeking en 11g.
    Avec "intelligent cursor sharing" en 11g, je suis peut-être d'accord.
    Mais 'bind variable peeking' construit le plan d'exécution d'après les variables de la première exécution et le garde ensuite. Et donc ce plan d'exécution n'est probablement pas adapté aux autres exécutions. Celà rend même la stabilité du plan très aléatoire !

    Personellement je préfères un mauvais plan d'exécution stable (au moins je le sais) qu'un plan instable...

    Cordialement,
    Franck.

  11. #11
    Expert confirmé
    Avatar de pachot
    Homme Profil pro
    Developer Advocate YugabyteDB
    Inscrit en
    Novembre 2007
    Messages
    1 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Developer Advocate YugabyteDB
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 822
    Billets dans le blog
    1
    Par défaut
    Ah oui,
    Alors j'ai oublié une 3ème chose: il faut qu'oracle puisse reconnaitre que la selectivité est différente suivant la valeur, au niveau de ses statistiques.
    Il faut voir les histograms pour celà (sur la colonne STATUT).
    Cordialement,
    Franck.

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

Discussions similaires

  1. Message 'Duplicate index entry'
    Par Poulou dans le forum Administration
    Réponses: 13
    Dernier message: 04/05/2004, 14h57
  2. Index n'est pas a jour
    Par touhami dans le forum Paradox
    Réponses: 5
    Dernier message: 11/12/2002, 14h47
  3. [Technique] Intérêt des index
    Par ddams dans le forum Décisions SGBD
    Réponses: 10
    Dernier message: 04/11/2002, 15h11
  4. [Technique] Index, comment font les moteurs de recherche ?
    Par bat dans le forum Décisions SGBD
    Réponses: 4
    Dernier message: 25/10/2002, 15h41
  5. Requête imbriquée et indexes INTERBASE
    Par vadim dans le forum InterBase
    Réponses: 2
    Dernier message: 06/09/2002, 16h15

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