Bonjour,

J'ai une requête du type
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'
J'ai comme caractéristiques :
  • 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 ?