Définition :
Le clustering factor d'un index est un indicateur qui permet à l'optimiseur Oracle de savoir si l'ordre des rowid dans les feuilles de l'index est plus ou moins similaire à l'ordre des rowid de sa table. Plus l'ordre des rowid dans les feuilles de l'index est proche de ceux de la table et plus le clustering factor est petit. Donc plus il est petit et mieux c'est.
Il varie entre le nombre de block de la table et le nombre de lignes de la table.
Approfondissement :
Il faut bien comprendre que lorsqu'Oracle utilise un index pour accéder aux données, il utilise un méthode de scan séquentiel de l'index. Ce type de scan et fait block à block alors que pour scanner une table Oracle utilise une méthode d'accès dite scattered qui (en fonction du paramètre db_file_multiple_read_count) permet de lire plusieurs blocks de données à la fois.
De plus avec un scan d'index, si toutes les colonnes nécessaires à la requête ne sont pas incluses dans l'index, il faudra, pour chaque rowid indentifiée dans le scan d'index faire un "table access by rowid" c'est à dire un accès à la table par le rowid.
Si l'index n'est pas trié de manière proche de la table, et que la selectivité de l'index et/ou des critères de prédicats est faible, l'optimiseur oracle préférera (avec raison) faire un scan de table.
Le clustering factor d'un index est lisible sur les vues systèmes ALL_INDEXES, USER_INDEXES ou DBA_INDEXES