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 :

Pourquoi Oracle n'utilise pas mes index ?


Sujet :

SQL Oracle

  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1
    Par défaut Pourquoi Oracle n'utilise pas mes index ?
    Bonjour à tous,

    Configuration : Oracle 9i Entreprise version 9.2.0.7.0

    Voilà pour les présentations, maintenant mon problème :

    Je suis en train d'optimiser des requêtes par l'analyse du plan d'exécution (avec Toad) et création des index qui vont bien.
    Seulement pour les jointures suivantes j'ai toujours des "TABLE ACCESS FULL" :

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    SELECT *
     
    FROM
    	(((((((MAPL INNER JOIN PLKO ON
    	   (MAPL.PLNTY = PLKO.PLNTY) AND (MAPL.PLNNR = PLKO.PLNNR) AND (MAPL.PLNAL = PLKO.PLNAL))
    	 INNER JOIN PLAS ON
    	    (PLKO.PLNTY = PLAS.PLNTY) AND (PLKO.PLNNR = PLAS.PLNNR) AND (PLKO.PLNAL = PLAS.PLNAL))
    	  INNER JOIN PLPO ON
    	     (PLAS.PLNTY = PLPO.PLNTY) AND (PLAS.PLNNR = PLPO.PLNNR) AND (PLAS.PLNKN = PLPO.PLNKN))
    	   LEFT OUTER JOIN CRHD ON
    	      (PLPO.ARBID = CRHD.OBJID))
     
    WHERE
    	MAPL.DATUV <= '99991231' AND
    	PLKO.DATUV <= '99991231' AND
    	PLAS.DATUV <= '99991231' AND
    	PLPO.DATUV <= '99991231'
    ORDER BY
    	MAPL.MATNR,
    	MAPL.WERKS,
    	PLAS.PLNTY,
    	PLAS.PLNNR,
    	PLAS.PLNAL,
    	PLAS.PLNKN,
    	MAPL.DATUV DESC,
    	PLKO.DATUV DESC,
    	PLAS.DATUV DESC,
    	PLPO.DATUV DESC
    Et voici une partie de l'explain plan (celle avec les access full) :
    NESTED LOOPS 1 273 790
    - HASH JOIN 61 8 K 668
    -- HASH JOIN 1 K 233 K 471
    --- TABLE ACCESS FULL PLKO 16 K 1 M 50
    --- TABLE ACCESS FULL MAPL 89 K 3 M 154
    -- TABLE ACCESS FULL PLAS 102 K 2 M 138
    - TABLE ACCESS BY INDEX ROWID ADMOASIS.PLPO 1 124 2
    -- INDEX RANGE SCAN ADMOASIS.idx_PLPO_KN 1 1

    J'ai pourtant créé des index sur MAPL (PLNTY, PLNNR, PLNAL), PLKO (PLNTY, PLNNR, PLNAL), PLAS (PLNTY, PLNNR, PLNAL) + (PLNTY, PLNNR, PLNKN)
    Idem pour PLPO avec (PLNTY, PLNNR, PLNKN) qui est bien accédée par Index Rowid

    Pouvez-vous me dire pourquoi PLKO et PLAS sont toujours lues en full ??

    Merci d'avance !

    Yannick

  2. #2
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Malin celui qui pourrait le dire avec ces informations seulement.
    La trace de l’événement 10053 permettra probablement de réponde a cette question.

  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
    Il y a 3 ( de trop dans la clause from !

  4. #4
    Membre Expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Par défaut
    Citation Envoyé par mnitu Voir le message
    Malin celui qui pourrait le dire avec ces informations seulement.
    La trace de l’événement 10053 permettra probablement de réponde a cette question.
    et puis, c'est tellement plus drôle en ne nous donnant pas tout l'explain plan...
    Et voici une partie de l'explain plan (celle avec les access full) :

  5. #5
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Citation Envoyé par yaggi64 Voir le message
    ...
    Pouvez-vous me dire pourquoi PLKO et PLAS sont toujours lues en full ??
    ...
    Yannick
    Bon, on peut répondre à cette question autrement: parce que l'optimiseur a estimé que c'est le meilleur chemin pour recherche ces données en regarde des informations desquelles il dispose. Il est possible, en dépit du fait que vous avez crée des index et que vous pensez qu'il devrait les utiliser, que l'optimiseur a raison et vraiment c'est le meilleur plan d'exécution; avez vous un réel problème de performance ? Il est possible que les informations fournis à l'optimiseur soit erronées ou périmées; comment avez-vous calculé les statistiques, quelles sont vos paramètres particuliers ?
    Supposant que vous avez un vrai problème de performance comparez les cardinalités estimés du plan d'exécution (l'explain plan) avec celles réelles (ceux du tkprof). Est-ce qu'il a des différences importantes ?

Discussions similaires

  1. Oracle n'utilise pas mes index
    Par piloupolo dans le forum PL/SQL
    Réponses: 14
    Dernier message: 18/08/2011, 14h33
  2. Pourquoi cette requête n'utilise pas d'index ?
    Par seal3 dans le forum Requêtes
    Réponses: 2
    Dernier message: 31/08/2009, 18h03
  3. Oracle n'utilise pas tous mes CPUS
    Par noumayoss dans le forum Oracle
    Réponses: 3
    Dernier message: 12/04/2006, 09h17
  4. Réponses: 5
    Dernier message: 07/04/2006, 13h26

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