MISE À JOUR : Essayez de rendre la colonne col NOT NULL. C'est la raison pour laquelle il n'utilise pas l'index. Quand ce n'est pas nul, voici le plan.
SELECT STATEMENT, GOAL = ALL_ROWS 69 10 30
HASH GROUP BY 69 10 30
INDEX FAST FULL SCAN SANDBOX TEST_INDEX 56 98072 294216
Si l'optimiseur détermine qu'il est plus efficace de NE PAS utiliser l'index (peut-être en raison de la réécriture de la requête), il ne le fera pas. Les conseils de l'optimiseur ne sont que cela, à savoir des conseils pour indiquer à Oracle un index que vous aimeriez à utiliser. Vous pouvez les considérer comme des suggestions. Mais si l'optimiseur détermine qu'il est préférable de ne pas utiliser l'index (encore une fois, à la suite d'une réécriture de requête par exemple), alors il ne le fera pas.
Reportez-vous à ce lien :http://download. oracle.com/docs/cd/B19306_01/server.102/b14211/hintsref.htm "La spécification de l'un de ces conseils oblige l'optimiseur à choisir le chemin d'accès spécifié uniquement si le chemin d'accès est disponible en fonction de l'existence d'un index ou d'un cluster et des constructions syntaxiques de l'instruction SQL. Si un conseil spécifie un chemin d'accès indisponible, alors l'optimiseur l'ignore."
Étant donné que vous exécutez une opération count(*), l'optimiseur a déterminé qu'il est plus efficace d'analyser simplement l'intégralité de la table et du hachage au lieu d'utiliser votre index.
Voici un autre lien pratique sur les astuces :http://www.dba-oracle.com/t_hint_ignored. htm