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 :

utilisation des index


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Par défaut utilisation des index
    Bonjour a tous

    dans un select (beaucoup plus long que ca...ceci est un extract qui surement ne fonctionne pas...)
    j'ai l'index d'une table qui n'est pas utilisé.
    Il existe un index sur ID de table 1 et idem sur table 2.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT
    ....
    LEFT JOIN (SELECT MAX(ID) AS IDB,IDS,IDP,MAX(CHP1) AS CHP1,MAX(CHP2) AS CHP2,MAX(DATE) AS DATE_SIM, MAX(STATE) AS STATE_ID
    	  	   		 FROM(SELECT ID,IDS,IDP FROM TABLE1 WHERE TABLE1.ID = 5
    				UNION
    			(SELECT MAX(ID) AS IDB,IDS,IDP,MAX(CHP1) AS CHP1,MAX(CHP2) AS CHP2,MAX(DATE) AS DATE_SIM, MAX(STATE) AS STATE_ID
    	  	   		 FROM(SELECT IDS,IDP FROM TABLE2 WHERE TABLE2.ID = 5
    			 GROUP BY IDS, IDP
    L'action plan marque pour ces objets des TABLE ACCESS FULL alors que les index existent. Puis je utiliser des hint pour forcer l'utilisation des index?? ou dois je refaire la query pour que les index soient utilisées?

    D'avance merci

  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 ,

    1.Quelle version Oracle tu as au patch pres (ex 11.1.0.7) ?

    2. Que donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sho parameter optimizer
    3. Quelle est la valeur de CURSOR_SHARING ?

    4. Quel type de base est-ce ? (OLTP ou Datawarehouse)

    5.Combien ramene la requete sur table1 et sur table 2 pour ID=5 par rapport au nombre total de ID dans chaque table ?

    6. Est ce que les stats sont a jour pour les tables et les indexes

    7.Quelle commande exacte tu utilise pour faire les stats ?

  3. #3
    Membre éprouvé
    Inscrit en
    Septembre 2008
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 101
    Par défaut
    Je m attendrais aussi a trouver l utilisation d un index dans le plan d execution pour au moins ce genre de sous requete "SELECT ID,IDS,IDP FROM TABLE1 WHERE TABLE1.ID = 5" et tu peux forcer l utilisation avec un hint /*+ index(Table index) */.

    Mais, l utilisation d un index a un cout --> Oracle ne l utilise pas car c est peut etre plus performant de retrouver la valeur sans l utiliser.
    Si la colonne ID n est pas la cle plimaire, il se peut que l index ne soit pas assez discriminant pour la valeur 5 (par exemple si 90% de la table a ID=5)

  4. #4
    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

  5. #5
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Par défaut
    Salut

    tout d'abord, merci pour vos reponses super rapides.
    Je vais repondre dans les questions:


    1.Quelle version Oracle tu as au patch pres (ex 11.1.0.7) ?
    oracle 9i: 9.2.0.1.0

    2. Que donne
    Code :

    sho parameter optimizer

    SQL> sho parameter optimizer

    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
    NAME                                 TYPE
    ------------------------------------ --------------------------------
    VALUE
    ------------------------------
    optimizer_dynamic_sampling           integer
    1
    optimizer_features_enable            string
    9.2.0
    optimizer_index_caching              integer
    0
    optimizer_index_cost_adj             integer
    100
    optimizer_max_permutations           integer
     
    NAME                                 TYPE
    ------------------------------------ --------------------------------
    VALUE
    ------------------------------
    2000
    optimizer_mode                       string
    CHOOSE
    3. Quelle est la valeur de CURSOR_SHARING ?
    Similar
    4. Quel type de base est-ce ? (OLTP ou Datawarehouse)
    C'est un melange des 2 car dans la meme instance il existe plusieurs applications...certaine OLTP et les autres..datawarehouse.

    5.Combien ramene la requete sur table1 et sur table 2 pour ID=5 par rapport au nombre total de ID dans chaque table ?
    55323 lignes sur un total de 229287

    6. Est ce que les stats sont a jour pour les tables et les indexes
    last analysed: 17/09/2009 22:00:37

    7.Quelle commande exacte tu utilise pour faire les stats ?
    (ils -- car la base n'est pas a moi) utilisent DBMS_STAT sur le schema entier.
    mais je suis pas sur...Avant ils utilisaient analyse.

    __________________

  6. #6
    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
    Pour faire rapide :

    Tu cherches 24% des tables (mais j'ai demandé les 2 tables en séparées en fait ...) , Oracle décide de faire un full scan , c'est normal !!!
    pour verification , juste pour tester , tu peux faire un

    set timing on et faire in hint sur les indexes des 2 tables ...

    De plus :

    Citation Envoyé par ldiaz Voir le message


    1.Quelle version Oracle tu as au patch pres (ex 11.1.0.7) ?
    oracle 9i: 9.2.0.1.0
    ==> Pas Patché ... Il y a des bug liés a l'optimiseur qui sont corrigés par les Patchs et plus d'autres bug , vor MEtalink, mais bon


    3. Quelle est la valeur de CURSOR_SHARING ?
    Similar
    ==> Voir metalink pour les bug lié au SIMILAR

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    would never ever in a million years use cursor_sharing=similar|force AT THE INSTANCE LEVEL.
     
    You may use this - temporarily - in a buggy application whilst the developers fix this priority one security, performance and scalability bug.
     
    Never in the init.ora
    Only in the application(s) that need it while they are fixing the code.
    http://asktom.oracle.com/pls/asktom/...:3696883368520
    ==>

    5.Combien ramene la requete sur table1 et sur table 2 pour ID=5 par rapport au nombre total de ID dans chaque table ?
    55323 lignes sur un total de 229287
    ==> Ici tu a 24% , Oracle decide de faire un full , ca n'a rien d'exceptionnel !!!

    Mais il faut faire un count sur chaque table en fait pas sur l'union

    combien un count sur table1 et un count sur table2 pour vérifier le purcentage

    6. Est ce que les stats sont a jour pour les tables et les indexes
    last analysed: 17/09/2009 22:00:37

    7.Quelle commande exacte tu utilise pour faire les stats ?
    (ils -- car la base n'est pas a moi) utilisent DBMS_STAT sur le schema entier.
    mais je suis pas sur...Avant ils utilisaient analyse.
    C'est tres important !! (Comment c'est SCHEDULE, et commnt c'est calculé)
    Si le contenu des tables a chagné depuis !!!
    en plus tu n'a pas donné les info pour les indexes

  7. #7
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Par défaut
    Salut

    donc ca veut dire que Oracle decide si il doit utiliser un index ou pas....ok je savais pas. Je pensais que les index etaient utilisés d'office.
    Donc l'utilisation, meme la creation d'un index doit repondre a des criteres de quantités de lignes, ratio etc...

    ALors si dans un action plan on voit des table access full (plusieurs) c'est pas evident de penser que l'on doit creer des index pour reduire le cost.
    Il faut faire des calculs...mais si les données changent?

  8. #8
    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
    Citation Envoyé par ldiaz Voir le message
    Salut

    donc ca veut dire que Oracle decide si il doit utiliser un index ou pas....ok je savais pas. Je pensais que les index etaient utilisés d'office.
    Donc l'utilisation, meme la creation d'un index doit repondre a des criteres de quantités de lignes, ratio etc...

    ALors si dans un action plan on voit des table access full (plusieurs) c'est pas evident de penser que l'on doit creer des index pour reduire le cost.
    Il faut faire des calculs...mais si les données changent?
    C'est pour ca qu'il y a les stats, l'optimiseur,les parametres dans l'init....

    Tu peux regarder des info ici pour commencer sinon la doc officielle est sur tahiti.oracle.com


    Initiation a l'otpimisation

    http://jpg.developpez.com/oracle/tuning/

    et ca

    http://marius-nitu.developpez.com/tu...-calcule-cout/

Discussions similaires

  1. [SQL2000] Utilisation des index ...
    Par scornille dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 03/05/2006, 16h07
  2. Utilisation des Indexes
    Par Wurlitzer dans le forum Oracle
    Réponses: 1
    Dernier message: 24/04/2006, 18h46
  3. Requête SELECT : limite d'utilisation des index
    Par DadaWeb dans le forum Requêtes
    Réponses: 7
    Dernier message: 07/12/2005, 22h24
  4. Compteur sur l'utilisation des index
    Par hkhan dans le forum Administration
    Réponses: 11
    Dernier message: 14/10/2004, 17h57
  5. Utilisation des "indexs" ?
    Par vandeyy dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 07/09/2004, 07h49

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