Bonjour,

Est-ce que quelqu'un sais comment utiliser le hint INDEX (par exemple) sur une requête utilisant le query rewrite.

Dans un modéle en étoile, soit une table vente qui est agrégé au temps, article et client...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
id_semaine date
id_client varchar2,
id_article varchar2,
id_region varchar2
CA, Marge...
Un index existe sur toutes les dimensions. Celui pour id_semaine s'appele vente_semaine.

Si je fais une requête :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
select /*+ NOREWRITE */ id_client, id_region, sum(ca), sum(marge)
from ventes
where id_semaine= 'xx/xx/xx'
group by id_client, id_region
Le plan d'exécution me montre que l'index sur id_semaine n'est pas utilisé (ma vrai requête est un peu plus complexe que l'exemple).
Si j'ajoute le hint index(ventes vente_semaine), il prend bien l'index.

En réalité, une vue matérialisée ventes_bis existe et fait l'agrégation des données sur semaine/client/region(donc sans l'article). La base est correctement configurée (query_rewrite_integrity=trusted, etc...).
L'index sur id_semaine s'appele vente_bis_semaine.

Si j'enleve le hint NOREWRITE, Oracle va bien utiliser la vue matérialisée ventes_bis.
Par contre, le hint index(ventes vente_semaine) n'est pas pris en compte

J'ai tenté de mettre index(ventes vente_bis_semaine) mais ce n'est pas mieux

si je fais le requête directement sur vente_bis_semaine (je fais le query rewrite moi même), ça marche.

Quelqu'un a une idée ?

Cdlt

Hugues