Bonjour,

Je me pose plusieurs questions sur les index B-Tree et j'aurai besoin de vos lumières; vous verrez avec ces questions que j'ai une vision floue de comment est organisé un index B-Tree mais je veux en savoir plus :

1) quelle est la taille d'un bloc racine/branche/feuille dans un index B-Tree? Si mon DB_BLOCK_SIZE est de 4Ko, est-ce que chaque bloc fait 4Ko ou bien les blocs d'un index sont différents des blocs d'un fichier de données (ce qui m'étonnerait beaucoup)?
2) quel est le nombre d'enregistrements dans un bloc d'un index B-Tree? Si le bloc feuille fait 4Ko, que mon index est sur le champ Nom (Varchar2(30) de la table TB_EMP), chaque enregistrement du bloc feuille fait 30 octets (le nom) + 10 octets (taille du rowid) soit 40 octets? Donc je pourrai mettre 4000/40 = 100 enregistrements par bloc feuille dans mon B-Tree?
3) comment est alimenté le bloc racine?
3.1) Cas d'un index sur un champ unique réparti de façon homogène : si j'ai 100 enregs dans le bloc racine, pour une table de 1 million d'enregs, avec l'index sur un champ ID number(10) allant de 1 à 1 000 000, est-ce qu'on fait 1 000 000/100 = 10 000 soit dans ma racine j'aurais 100 ID allant de 10 000 à 1 000 000 par tranche de 10 000 soit 10 000, 20 000, 30 000 ... 1 000 000?
Quid du cas où
3.2) Cas d'un index sur un champ unique réparti de façon non homogène : si j'ai 100 enregs dans le bloc racine, pour une table de 1 million d'enregs, avec l'index sur un champ ID number(10) allant de 1 à 1 000 000 000 (un milliard) MAIS avec 99,9999% des données allant de 1 à 999 999 ET une seule donnée au delà du million, valant 1 000 000 000 (un milliard), est-ce qu'on fait 1 000 000 000/100 = 10 000 000 soit dans ma racine j'aurais 100 ID allant de 10 000 000 à 1 000 000 000 par tranche de 10 000 000 soit 10 000 000, 20 000 000, 30 000 000 ... 1 000 000 000 sachant que cela ne reflète ABSOLUMENT pas la réalité?
3.3) cas d'un index sur un champ non unique : table avec un million d'enregs, je crée un index sur le champ Nom. Est-ce que Oracle va d'abord récupérer les bornes min et max de ce champ et les utiliser pour construire sa racine? Si le premier nom est "Abra" et le dernier "Zyblo", et qu'il y a 10 000 noms différents MAIS avec une répartition non homogène, comment Oracle va t-il choisir les N enregs qui vont composer la racine?
4) Est-ce que pour une valeur indexée, cette valeur peut se trouver dans N feuilles? Dans le cas où on indexe un champ non unique (le Nom par exemple), qu'il y a 2 000 fois la même valeur pour ce champ (2 000 salariés de nom "DUPONT"), est-ce que cette valeur va se retrouver dans 20 blocs feuilles contigües (un bloc pourrait contenir 100 enregs max) avec les rowids?
5) Est-ce que dans les blocs Racine et Branches le Rowid est présent? Si oui, est-ce qu'il est utilisé pour accéder à la table? D'après ce que j'ai compris on utilise les blocs Racine et Branches pour accéder aux blocs Feuilles et c'est là qu'on récupère les Rowid pour lire dans la table.
6) Est-ce que les rowid d'un bloc feuille sont lus un par un ou bien, pour une même valeur recherchée, on les lit en bloc pour diminuer le nombre d'aller/retours entre l'index et la table? Exemple : je recherche le mais des employés de nom "DURAND"; il y a 50 "DURAND" dans la société et j'accède au bloc racine de l'index sur le nom contenant le nom "DURAND" : il y a 50 rowid; Oracle les lit comment : un par un, en bloc?

Bon, ben pour un premier post sur les index c'est pas mal non

Merci par avance pour vos réponses.