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

Oracle Discussion :

index sous oracle


Sujet :

Oracle

  1. #1
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    319
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 319
    Points : 80
    Points
    80
    Par défaut index sous oracle
    salut,

    J'aurai aimé savoir est ce que oracle crée directement un index sur les clé primaire et les clé etrangere lorsque l'on créer une table ?
    Et quelle type d'index il l'utilise ?

    Merci

  2. #2
    Membre éprouvé Avatar de Yorglaa
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    845
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 845
    Points : 931
    Points
    931
    Par défaut
    oui sur les clefs primaires uniquement (automatiquement).
    il s'agit d'un index unique de type B-Tree.

  3. #3
    Membre régulier
    Inscrit en
    Janvier 2005
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 129
    Points : 121
    Points
    121
    Par défaut
    +1.

    En recherchant les objets de ton schéma, tu devrai trouver les index.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT object_name, object_type FROM user_object where object_type = 'INDEX';

  4. #4
    Expert Oracle confirmé

    Homme Profil pro
    Consultant Big Data
    Inscrit en
    Mars 2003
    Messages
    448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Consultant Big Data
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2003
    Messages : 448
    Points : 926
    Points
    926
    Par défaut
    Bonjour,

    En complément d'info, et comme il a été dit, Oracle crée normalement un index unique, de type B-Tree, sur les clés primaires, mais aussi sur les contraintes d'unicité.

    Je dis normalement, car si il existe déjà un index pouvant servir pour cette contrainte, l'index peut être réutilisé.

    Par exemple, si on a une table avec 2 champs A et B qui sont indexés, et que l'on ajoute une contrainte de PK sur cette table, Oracle peut décider d'utiliser l'index pour cette contrainte, au lieu d'en créer un.

    Voici un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    create table essai (a number not null, b number not null, c number) ;
     
    create index idx_essai on essai (a, b) ;
     
    alter table essai add (constraint pk_essai primary key (a)) ;
     
    select table_name, constraint_name, index_name from user_constraints where table_name = 'ESSAI'  and constraint_type = 'P' ;
     
    TABLE_NAME   CONSTRAINT_NAME   INDEX_NAME
    ESSAI             PK_ESSAI	      IDX_ESSAI
    Si vous regardez le résultat du SELECT, vous voyez que l'index IDX_ESSAI, qui n'est pourtant pas unique, sert pour cette constrainte.


    Dernière info à propos des Foreign Key : au contraire des contraintes de type PK et UNIQUE, celles-ci ne sont pas indexées. C'est à vous d'indexer les FK ou pas suivant votre besoin.

  5. #5
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    319
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 319
    Points : 80
    Points
    80
    Par défaut
    Merci de vos reponse ;il y a deux choses que je n'ai pas trop saisi
    Le unique ?
    et les index cluster ,?
    Les cluster sa permet de regrouper les tables qui on des colonnes communes.

  6. #6
    Expert Oracle confirmé

    Homme Profil pro
    Consultant Big Data
    Inscrit en
    Mars 2003
    Messages
    448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Consultant Big Data
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2003
    Messages : 448
    Points : 926
    Points
    926
    Par défaut
    Bonjour,

    Unique, c'est pour dire qu'un champ (ou plusieurs) d'une table contient une valeur unique.

    Une contrainte d'unicité crée donc un index unique.

    NB : en fait, une clé primaire, c'est tout simplement un (ou plusieurs champs) non nul et unique.

    Dans l'exemple suivant, je t'ai fait 4 cas de figure :
    NUM1 a une contrainte de PK, donc ce champ est obligatoire et unique, et il y a un index unique de créer (PK_ESSAI),

    NUM 2 a une contrainte d'unicité, donc le champ est unique, mais pas obligatoire. Il y a aussi un index unique de créer (UNIQUE_ESSAI),

    NUM3 a un index non unique (donc les valeurs de NUM3 ne sont pas forcément être uniques),

    NUM4 a un index unique, donc les valeurs sont uniques.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    create table essai (num1 number, num2 number, num3 number, num4 number,
      constraint PK_ESSAI primary key (num1),
      constraint UNIQUE_ESSAI unique (num2)) ;
     
    create index idx_essai_non_unique on essai (num3) ;
    create unique index idx_essai_unique on essai (num4) ; 
     
    select index_name, uniqueness from user_indexes where table_name = 'ESSAI' ;
     
    INDEX_NAME	        UNIQUENESS
    IDX_ESSAI_NON_UNIQUE   NONUNIQUE
    IDX_ESSAI_UNIQUE           UNIQUE
    PK_ESSAI                          UNIQUE   
    UNIQUE_ESSAI                   UNIQUE
    Pour finir, quelle est la différence entre créer une contrainte d'unicité, et créer un index unique ?

    C'est que l'index peut être détruit (drop index IDX_ESSAI_UNIQUE) sans pb, ou désactiver.

    Alors que, avec une contrainte, il est impossible de détruire l'index tant que la contrainte existe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    drop index UNIQUE_ESSAI ;
    ORA-02429: impossible abandonner index utilisé pour utilisation de clé primaire/unique

Discussions similaires

  1. Question sur l'utlisation des index sous oracle?
    Par ouadie99 dans le forum Administration
    Réponses: 19
    Dernier message: 26/11/2008, 21h45
  2. Pas de JOIN sous Oracle (vraiment dommage...)
    Par Isildur dans le forum Langage SQL
    Réponses: 7
    Dernier message: 15/03/2007, 12h28
  3. Cryptage de colonnes sous Oracle
    Par Julian Roblin dans le forum SQL
    Réponses: 9
    Dernier message: 28/11/2006, 19h24
  4. comment s'incremente un index sous oracle ?
    Par elitol dans le forum Langage SQL
    Réponses: 4
    Dernier message: 16/07/2004, 17h16
  5. Les index sous Sybase
    Par Emdis dans le forum Autres SGBD
    Réponses: 2
    Dernier message: 02/06/2003, 16h21

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