175
6.1 Principes de l’indexation
*/
-- row, key 487, ChildPageId : 9122
DBCC PAGE (testdb, 1, 9122, 3)
/*
FileId PageId
Row
Level ChildFileId ChildPageId codeLong (key)
------ ----------- ------ ------ ----------- ----------- ---------1
9122
0
2
1
9039
487
1
9122
1
2
1
9076
489
1
9122
2
2
1
9123
491
1
9122
3
2
1
9160
493
*/
-- row, key 489, ChildPageId : 9076
DBCC PAGE (testdb, 1, 9076, 3)
/*
FileId PageId
Row
Level ChildFileId ChildPageId codeLong (key)
------ ----------- ------ ------ ----------- ----------- ---------1
9076
0
1
1
9073
489
1
9076
1
1
1
9075
4897
1
9076
2
1
1
3623
49
1
9076
3
1
1
9079
4906
*/
-- row, key 49, ChildPageId : 3623
DBCC PAGE (testdb, 1, 3623, 3)
/*
FileId PageId
Row
Level codeLong (key) HEAP RID
------ ----------- ------ ------ --------------------------------1
3623
0
0
49
0x380C000001000000
1
3623
1
0
490
0x590E000001000000
1
3623
2
0
4900
0x8C23000001000000
[...]
*/
Nous créons d’abord une table temporaire pour stocker le résultat de DBCC IND.
Nous cherchons ensuite dans cette table l’ID de la page d’entrée de l’index : son
nœud racine. Il s’agit de la page qui est au niveau le plus élevé. Nous regardons
ensuite son contenu avec DBCC PAGE. Cela nous retourne une structure qui comporte
notamment les colonnes ChildPageId et codeLong (Key), indiquant respectivement
l’ID de la page fille (celle qui se trouve au nœud intermédiaire suivant, c’est-à-dire
au niveau inférieur de l’index), et la clé qui représente la ligne. Chaque entrée
d’index représente une plage de valeurs de clés située entre la clé indiquée dans la
ligne et la clé de la ligne suivante de ce nœud. Par exemple ici, la ligne 2 du nœud 5
de l’index, pointe sur des valeurs de clé comprises entre '253' incluse et '45' exclue
(n’oublions pas que cette colonne est un char, pas un numérique, et que la clé est
donc triée alphabétiquement). La ligne 3 pointe sur toutes les clés égales ou supérieures à '45'. C’est là que nous devons descendre. Nous suivons donc cette voie sur
six niveaux, et nous voyons que chaque page référencée dans ChildPageId est une
page située au niveau inférieur. Lorsque nous arrivons au nœud feuille, le niveau 0,
le ChildPageId est remplacé par un HEAP RID, qui est un stockage binaire du numéro
de fichier, de page, et de ligne dans la page, de la ligne qui correspond à cette valeur.
Dans le cas d’un index sur une table clustered, nous aurions trouvé la clé de l’index
clustered.
Précédent

- 187/334

Suivant