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 :

acces by index est-il normal


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Analyste
    Inscrit en
    Août 2003
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste
    Secteur : Services de proximité

    Informations forums :
    Inscription : Août 2003
    Messages : 85
    Par défaut acces by index est-il normal
    Bonjour à tous,

    Je suis sur Oracle 10g.
    J'étudie l'optimiseur sur une simple requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select * from client,contrat where nom='X' and client.numclient=contrat.refclient ;
    J'obtiens le plan suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Nesteed loops
       Table access contrat Full
       Table access client by index rowid
               Nom='X'
               Index  Pk_client unique scan
                      client.numclient=contrat.refclient
    Mes tables ne contiennent pas beaucoup de données (au max 5 tuples par table).
    Mon client 'X' apparaît 3 fois dans ma table client.
    Mes stats sont à jour et le paramètre optimizer_mode est à choose.

    Pourquoi l'optimiseur me fait passer par l'index alors qu'il me semblait un full table scan sur de petite table est préférable ?

    Je vous remercie par avance pour votre aide.
    cordialement
    Startout

  2. #2
    Membre confirmé
    Inscrit en
    Juin 2005
    Messages
    207
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 207
    Par défaut
    Salut,

    Avec un index, le SGBD évalue le coût d'utilisation des index par rapport à celui de parcours de la table.

    Effectivement, en général, sur des petites tables, un index est inutile car moins performant qu'un full scan. Cependant, 2 remarques:
    1) Pourquoi mettre en place des mécanismes qui ne sont pas adaptés? Et pourquoi vouloir étudier le fonctionnement de l'optimiser dans des conditions anormales?
    2) Au niveau du plan d'exécution, essayez de supprimer l'index, de relancer le plan et de comparer les couts (temps et mémoire). Comparez, et vous verrez qu'il y a peut être une différence.

    Dans votre exemple, vu que votre index va servir à scinder la table en 2, je dirais que l'optimiser est pas nécessairement déconnant

  3. #3
    Membre confirmé
    Homme Profil pro
    Analyste
    Inscrit en
    Août 2003
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste
    Secteur : Services de proximité

    Informations forums :
    Inscription : Août 2003
    Messages : 85
    Par défaut
    Je vous remercie pour votre aide.
    Je teste dans des conditions anormales car je n'ai pas de jeux de données.
    Les datasets trouvés sur le net et sur ce forum ne me satisfait pas.

    Ceci est pour mon rapport de stage. Je dis dans celui-ci que l'optimiseur va privilégier le FTS lorsqu'on dispose de petite table malgré que l'index soit créé.
    Mais j'essaye de trouver le plan d'execution qui le démontre sans tricher (suppression des index).

    SQL dev me propose uniquement un repère cout.
    avec index => 4
    sans index => 7

    Sans ma clé primaire, il effectue la jointure avec un hash join. Je comprends encore moins. Je croyais que le hash join était intéressant quand les deux tables sont volumineuses.

    Je crois que j'ai encore du boulot avant d'être opé sur Oracle...

  4. #4
    Membre Expert Avatar de ojo77
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Décembre 2010
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 680
    Par défaut
    Bonjour,

    Avez-vous calculé vos statistiques avec des histogrammes ?
    Combien de lignes avez-vous par blocs de données ?
    Les statistiques systèmes ont-elles été calculées ?
    Quelles sont les valeurs de Vos paramètres optimizer_index_caching et optimizer_index_cost_adj ?

    Tous ces éléments peuvent influer sur le plan d'exécution.

Discussions similaires

  1. Réponses: 1
    Dernier message: 28/05/2010, 10h39
  2. Sniffeur RAW - Capture minimale - Est ce normal ?
    Par MonsieurAk dans le forum Développement
    Réponses: 11
    Dernier message: 27/04/2006, 08h35
  3. [FLASH 8] getTimer...est ce normal ou bizarre
    Par kubito dans le forum Flash
    Réponses: 1
    Dernier message: 14/04/2006, 00h58
  4. est ce normal que le module NET::FTP soit TRES lent ?
    Par ramislebob dans le forum Modules
    Réponses: 4
    Dernier message: 14/03/2006, 09h13
  5. [C#][Windows application] - Heure de l'est, heure normal
    Par Erakis dans le forum Windows Forms
    Réponses: 4
    Dernier message: 03/10/2005, 16h37

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