Bonsoir,
Oracle 11 offre la possibilité de conserver le résultat d'une requête en cache. Pour cela, il suffit d'ajouter le hint /*+ resultat_cache */ dans votre requête. Alors allons y pour la preuve par l'exemple:
Pour cela, j'ai un user lao qui dispose d'une jolie table T3(i number,j number) de 40 millions de lignes, et je suis amené à faire des select count(*) dessus régulièrement.
sqlplus /nolog
connect lao/lao
SET AUTOTRACE ON
SELECT COUNT(*) FROM T3;
Résultat des courses :
Temps d'execution :9 secondes
60868 consistent gets et autant de lectures physiques, et globalement j'aurai le même résultat en rejouant la requête plusieurs fois.
Utilisons notre hint.
SELECT /*+ result_cache*/ COUNT (*) FROM T3;
Résultat:
La première execution donne bien evidemment le même résultat que sans le hint.
Mais la ou cela devient interessant, c'est lors des autres appels que ce soit dans ma session en cours ou depuis une autre session. Le résultat devient instantané et pour cause, puisqu'Oracle va chercher uniquement le résultat en cache.
Deux constatations:
- On peut voir dans le plan d'execution l'apparition d'une ligne indiquant pour la colonne opération "Result cache". Ce qui nous montre bien qu'ORACLE soit allé chercher l'information dans le cache.
- On peut également constater, dans les statistiques 0 consistent gets et 0 lecture physiques. Ce qui explique le coté instantané du résultat.
Remarque: Il convient d'utiliser cette technique sur des tables relativement statiques et savoir que potentiellement le résultat de la requête ne refletera pas la réalité du moment.
LAO.