vendredi 30 octobre 2015

Reverse Index

Ce sont des index B*Tree qui indexent les valeurs miroirs ou inverses (par exemple, le nom
"FRED" devient "DERF"). La syntaxe est identique, il faut juste spécifier le mot clé REVERSE à la fin de l’instruction :

Create index  Nom_Index on  NomTable (<col1>[,<col2>,…]) REVERSE

Le but de ce type d’index est d’éviter que deux valeurs qui se suivent dans leur ordre naturel se retrouvent dans la même feuille. L’objectif est ici de s’organiser pour avoir un mauvais Clustering Factor. Mais alors dans quel intérêt ?

Imaginez une table dont la clé est un numéro séquentiel et qu’il y ait de nombreuses insertions en parallèle. On se retrouve alors avec plusieurs requêtes qui vont vouloir mettre à jour la même feuille d’index. Or, cette opération ne peut pas être faite par deux requêtes simultanément donc cela aurait pour effet de bloquer chacune d’elles le temps que la précédente ait terminé la mise à jour de la feuille d’index. Avec un index reverse, elles vont mettre à jour des feuilles d’index différentes et ainsi elles ne se gêneront pas. Cela permet donc de réduire la contention d’accès en écriture des feuilles d’index, ce qui sera intéressant sur des requêtes parallèles, particulièrement en environnement Oracle RAC. Cependant, ce type d’index montre des limites car il n’est utilisable que sur des conditions de type égalité (=), ce qui signifie qu’il ne fonctionnera pas pour des opérations Index Range Scan.

Aucun commentaire:

Enregistrer un commentaire