Collected posts: Oracle, SQL, PL/SQL, Performance, Security...(More than 300 blogs)

lundi 7 novembre 2011

Oracle 11G: Les indexes invisibles


Vous pouvez créer un index comme invisible ; ce que veut dire le CBO ne voit pas cet index lors de création de plan d’exécution.

Le but de l’utilisation des indexes invisibles résident en deux :
  •        Test l’utilisation de cet index, Si la performance s’est amélioré alors on le rend visible sinon on le supprime
  •        On veut l’utiliser dans un cas particulier sans toucher les autres plans et la performance des autres processus dans notre application utilisant cette table.

Tous les index sont par défaut visibles pour le CBO sauf si on les crée invisible.

On crée une table events:
SQL> create table events as select sysdate-rownum date_event ,  'Event '||rownum  Event, rownum event_id from dual connect by level < 10  ;



On crée un index invisible sur cette table: create index events_idx1 on events (event_id) invisible;

L'utilisation des indexes invisbles est contrôlé par le paramètre systeme optimizer_use_invisible_indexes. Ce paramètre est par défaut à false. 

On essaye avec le Hint index pour obliger le CBO d'utliser cet index mais ça marche pas.


     Si vous voulez que le CBO prend en compte tous les index invisibles, il suffit de mettre le paramètre optimizer_use_invisible_indexes à True. La valeur par défaut est False
     Vous pouvez le mettre à true au niveau session ou bien niveau système.
  •      alter session set optimizer_use_invisible_indexes=true;
  •         alter system set optimizer_use_invisible_indexes=true;






Maintenant notre index invisible est utilisé.






1 commentaire:

  1. Remarque : au lieu de modifier le paramètre optimizer_use_invisible_indexe au niveau système ou session pour que CBO utilise l'index invisible; Oracle propose un hint qui permet d'autoriser l'utilisation des index invisibles USE_INVISIBLE_INDEXES

    RépondreSupprimer