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...
Un index existe sur toutes les dimensions. Celui pour id_semaine s'appele vente_semaine.
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...
Si je fais une requête :
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).
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
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
Partager