Index clustered… qu’est ce que c’est ?

Quelle est la différence entre un index cluster et un index non cluster ?

Voici un petit article qui vous permettra de comprendre cette notion fondamentale…

Derrière chaque clef primaire (contrainte PRIMARY KEY) comme derrière chaque contrainte de type UNIQUE, les SGBDR créés des index.

Un index est une structure de données redondante qui permet d’ordonner les données indexées afin de retrouver le plus vite possible les données que l’on index.
Ainsi les n° dans une rue constituent en fait un index… Autrefois il n’y avait pas de n° dans les rues (mais il y avait moins de monde et les gens se connaissait… On a ensuite inventé les immeubles à appartement, ce qui a compliqué la chose). Grâce à la numérotation des immeubles il est devenu facile de se repérer. Si je vous invite chez moi ce soir à Paris pour le diner en vous donnant rendez-vous à 20h aux Champs Élysées (hé oui, SQL ça rapporte, alors il me fallait une demeure prestigieuse… ;-) ) vous risquez de mettre beaucoup de temps venir chez moi, car il vous faudra courir d’immeuble en immeuble afin de chercher un nom sur une boîte au lettres ou sur un interphone… Mieux vaut donc les numéros sur les immeubles ! Rudi m’a fait remarqué qu’en chine les immeubles sont numérotés dans la même rue du premier construit au dernier, ce qui facilite moins la recherche d’un immeuble précis lorsque l’on n’y est pas habitué …

Pour ce qui est des structures de stockage des index il en existe différentes, mais la plus utilisée est un arbre dit équilibré (on s’arrange pour que le niveau des feuilles de l’arbre soit constant).
Cependant dans un index on trouve à la fois la donnée indexée mais aussi une marque afin de retrouver la ligne dans la table. Cette marque peut être par exemple une référence à un emplacement physique de la ligne dans les divers fichiers de la base (N° de fichier, N° de page et N° d’emplacement de la ligne dans la page – les lignes d’une table n’étant par nature pas numérotées…. voir post sur le sujet dans mon blog…).

L’idée de l’index cluster est de faire une pierre deux coups : mélanger l’index et la table. On s’évite ainsi une redondance et les lignes de la table sont physiquement triées selon l’ordre de la clef d’index.
Ainsi, une table dotée des colonnes Nom, Prénom, DateNaissance, Sexe, si elle est dotée d’un index cluster sur Nom est physiquement triée sur les valeurs des noms des personnes. Les autres colonnes n’étant pas triées.
On s’économise ainsi une redondance de données.

Évidemment on ne peut avoir qu’un seul index cluster dans une table car en fait l’index cluster c’est la table elle même !

Pas opposition, les index non cluster s’appellent des index heap. En tas…

Au fait, que veut dire cluster en français ? groupe, grappe, ensemble, amas sont les définitions du dictionnaire. La traduction littérale la plus proche du terme « index cluster » est : index « aggloméré ».


Frédéric BROUARD, Spécialiste modélisation, bases de données, optimisation, langage SQL.
Le site sur le langage SQL et les S.G.B.D. relationnels : http://sqlpro.developpez.com/
Expert SQL Server http://www.sqlspot.com : audit, optimisation, tuning, formation
* * * * * Enseignant au CNAM PACA et à l’ISEN à Toulon * * * * *

Une réflexion au sujet de « Index clustered… qu’est ce que c’est ? »

  1. Avatar de MatthieuQMatthieuQ

    Bonjour,

    Visiblement, les tables de la base MS SQL SERVER Northwind ont des index cluster sur les champs ID (PK), les autres champs indexés étant, par définition non-cluster.

    Existe-t-il un intérêt à définir un autre champ, par exemple Ville en « index cluster » ?

    Merci,

Laisser un commentaire