Bonjour,
J'ai une requête du type
J'ai comme caractéristiques :
Code : Sélectionner tout - Visualiser dans une fenêtre à part select * from table1 a, table2 b where a.cle=b.cle and b.champ2='CLE-CHAMP2'
- table 1 et table 2 possèdent un index sur cle.
- table 1 a des stats a jour.
- table 2 n'a pas de stats ni d'histogrammes car c'est une table très volatile.
- table1 est une table volumineuse
- b.champ2='CLE_CHAMP2' peut renvoyer un faible volume ou un important volume de données
Comme il n'y a pas d'histogrammes sur table2, oracle est incapable de mesurer la sélectivité de b.champ2='CLE_CHAMP2'. De ce fait il fait un full scan systématiquement sur table 1 mais si la sélectivité est très grande.
Si je calcule les histogrammes, ceux-ci sont très rapidement obsolètes car la table est très volatile. Je voudrais éviter d'avoir à calculer les histogrammes systématiquement avant d'exécuter la requête. Oracle 10g fait de l'échantillonnage dynamique mais je suis en oracle 9. Est ce quelqu'un a une idee pour que l'index de la table 1 soit utilisé quand la sélectivité est grande ?
Partager