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 :

[9i] Organization index


Sujet :

Oracle

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 134
    Points : 46
    Points
    46
    Par défaut [9i] Organization index
    Bonjour,
    j'ai une petite question sur l'option organization index lors de la creation d'une table:
    Cette option equivaut à créer un index sur chaque champs qui compose la PK?
    Oui?
    Non?
    Merci

  2. #2
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    Bonjour ,
    Non cela équivaut à avoir un index , sur toutes les colonnes de la tables .

    Sauf que dans ce cas la on fait l'économie de l'espace

  3. #3
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Pour être clair, cela permet de constituer une table qui a la même structure qu'un index B-Tree.

    Pour simplifier, on va dire que toutes les colonnes de la table sont intégrées dans l'index et que la lecture de celui-ci suffit à ramener les infos.
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  4. #4
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Points : 848
    Points
    848
    Par défaut
    Bonjour,


    Pas du tout ! Une telle table est "organisée en index" : elle a une PK, et les données sont dans les feuilles du B*Tree de l'index de
    cette PK.

    Tu peux ensuite créer d'autres indexes (dit secondaires) sur cette table.


    Laly.
    In the heart of the truly greats, perfection is never achieved but endlessly pursued.

    Mon article sur les fonctions analytiques d'Oracle (calcul de moyennes mobiles, de quartiles et bien d'autres...)

  5. #5
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Points : 848
    Points
    848
    Par défaut
    Bonjour,


    Citation Envoyé par jaouad
    Bonjour ,
    Non cela équivaut à avoir un index , sur toutes les colonnes de la tables .

    Sauf que dans ce cas la on fait l'économie de l'espace
    Je ne suis pas d'accord : ce qui est indexé, c'est uniquement la PK de cette table.


    Laly.
    In the heart of the truly greats, perfection is never achieved but endlessly pursued.

    Mon article sur les fonctions analytiques d'Oracle (calcul de moyennes mobiles, de quartiles et bien d'autres...)

  6. #6
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    Comme ca c'est bcp plus explicite :
    Une IOT est une table standart avec un idex concaténé sur toutes les colonnes .Cependant , contrairement à l'utilsation de deux segments distincts pour la table et l'index b-tree , le serveur Oracle gère une structure B-tree contenant :
    Les valeurs de clé primaires
    Les valeurs des autres colonnes ( non-clé) de la ligne
    La structure b-tree , basé sur la clé primaire de la table est organisé comme un index .Les blocs feuille de cette structure contiennent des lignes à la place des ROWID .
    AUtrement dit les lignes de la IOT sont toujours gérées selon l'ordre de la clé primaire .

    Vous pouvez créer des Index supplémentaires sur les IOT .Etant donnée que les lignes volumineuses d'une IOT peuvent réduirte à néant l'efficacité et la densité du stockage d'une stucture b-tree .Vous pouvez stocker une partie de la ligne dans un autre segment appellé zone de débordement .

  7. #7
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    Citation Envoyé par lalystar
    Bonjour,


    Citation Envoyé par jaouad
    Bonjour ,
    Non cela équivaut à avoir un index , sur toutes les colonnes de la tables .

    Sauf que dans ce cas la on fait l'économie de l'espace
    Je ne suis pas d'accord : ce qui est indexé, c'est uniquement la PK de cette table.


    Laly.
    effectivement ce que je voualis dire c'était qu'IOT gére toutes les colonnes ( même ne faisant pas partie de la PK ) sauf si on spécifie la zone de débordement

  8. #8
    Futur Membre du Club
    Inscrit en
    Juillet 2005
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    au fait, si je ne me trompe pas, une IOT est une table organisée en index, cad, que c'est comme si on avait un index B-tree sur la clé primaire d'une table, mais que la ligne de chaque index contient, le rowid, la valeur de la clé primaire et aussi le reste des valeurs de colones de la ligne, et tout ça dans un même segment. autrement dit j'ai toute ma table et toutes ses données dans une organisation b-tree comme un index.
    juste une question, pourquoi avoir le rowid de la ligne dans ce cas, là !!, ou est ce que je me trompe?, on ne l'a ptet pas !!!?, il ne reste plus rien de l'index dans ce cas , c que du B-tree pour faciliter la recherche de la clé !!.....ou est ce que je me trompe

  9. #9
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Justement, une IOT n'a pas besoin de ROWID puisque toutes les données sont dans l'index !
    donc il n'y a pas de ROWID dans une IOT.
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  10. #10
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Points : 848
    Points
    848
    Par défaut
    En fait dans une IOT il y a un rowid logique, qui est la clé primaire. La position d'une ligne dépend uniquement de la clé primaire.

    Mais les indexes secondaires utilisent un rowid classique; sinon ils ne seraient pas performant du tout.

    Si on a une IOT de profondeur 3 par exemple et un index secondaire de profondeur 3, alors l'accès à une ligne de l'IOT par un index couterait 6 I/O.

    Quand on tente d'accéder à une ligne d'une IOT via un index secondaire, Oracle va chercher dans le bloc dont l'adresse est indiqué dans l'index secondaire, si la valeur cherchée y figure ou pas (en effet la position d'une ligne dans une IOT peut changer : si il y a réquilibrage du B*Tree par ex). Si la valeur y figure bien c'est gagné, ca nous à couté avec notre exemple 3 I/O pour la recherche dans l'index secondaire + 1 I/O supplémentaire pour l'accès à la ligne via le rowid.
    Si la valeur n'y figure pas, on utilise alors la valeur de la PK de la ligne recherchée qui est aussi stockée dans l'index secondaire. Dans ce cas ca nous aura couté 3 I/O (lecture de l'index) + 1 I/O (accès via le rowid physique -> échec) + 3 I/O (accès via la PK).


    Laly.
    In the heart of the truly greats, perfection is never achieved but endlessly pursued.

    Mon article sur les fonctions analytiques d'Oracle (calcul de moyennes mobiles, de quartiles et bien d'autres...)

  11. #11
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Une IOT étant sensé stocker dans l'index toutes les colonnes (et donc celles de la PK) un index secondaire n'a que peu d'interêt...
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  12. #12
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Points : 848
    Points
    848
    Par défaut
    Citation Envoyé par SheikYerbouti
    Une IOT étant sensé stocker dans l'index toutes les colonnes (et donc celles de la PK) un index secondaire n'a que peu d'interêt...
    Pas d'accord, une IOT est une table à la base. Elle est stockée sous forme d'un B*Tree soit. Les indexes secondaires sont les équivalents des indexes sur une table normale.

    Si on a une table COTATION(id, date, cotation), dont la PK est (id, date) (on a une quote par société par jour), il est intéressant de la stocker sous la forme d'une IOT car :
    - les données d'un même id seront physiquement proches (intéressant pour des calculs de moyennes par id par ex.)
    - on économise l'espace de la PK

    Mais si j'ai besoin de connaitre toutes les cotations pour une date donnée, je vais placer un index secondaire sur la colonne date.


    Laly.
    In the heart of the truly greats, perfection is never achieved but endlessly pursued.

    Mon article sur les fonctions analytiques d'Oracle (calcul de moyennes mobiles, de quartiles et bien d'autres...)

  13. #13
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Inutile depuis la 9i puisque l'index sera utilisé même si la requête n'utilise pas toutes les colonnes de l'index. (date dans ton exemple)
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  14. #14
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Points : 848
    Points
    848
    Par défaut
    Si tu parles du skip scan index, un index multi-colonne peut effectivement être utilisé si la première colonne est de cardinalité faible... ce qui n'est pas le cas dans mon exemple, quand on gère des cotations de plusieurs milliers de sociétés...


    Laly.
    In the heart of the truly greats, perfection is never achieved but endlessly pursued.

    Mon article sur les fonctions analytiques d'Oracle (calcul de moyennes mobiles, de quartiles et bien d'autres...)

  15. #15
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073

Discussions similaires

  1. Message 'Duplicate index entry'
    Par Poulou dans le forum Administration
    Réponses: 13
    Dernier message: 04/05/2004, 14h57
  2. Index n'est pas a jour
    Par touhami dans le forum Paradox
    Réponses: 5
    Dernier message: 11/12/2002, 14h47
  3. [Technique] Intérêt des index
    Par ddams dans le forum Décisions SGBD
    Réponses: 10
    Dernier message: 04/11/2002, 15h11
  4. [Technique] Index, comment font les moteurs de recherche ?
    Par bat dans le forum Décisions SGBD
    Réponses: 4
    Dernier message: 25/10/2002, 15h41
  5. Requête imbriquée et indexes INTERBASE
    Par vadim dans le forum InterBase
    Réponses: 2
    Dernier message: 06/09/2002, 16h15

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