Des fois les plans d’exécution adoptés par le moteur d’Oracle ne sont pas forcément les meilleurs.
Même si les stats à jour, une requête peut mettre un certain temps, voire ne jamais se terminer !
La solution made in DBA consiste généralement à rajouter un hint, c’est à dire une petite ligne de code pour forcer le plan d’exécution.
Exemple :
SELECT /*+ FULL(SALES) */
...
FROM
SALES,
....
-- ici on ne passe par les index, on lit la table complètement
Pour coder ce hint dans Business Objects, on peut :
- modifier le sql généré
C’est dommage, on perd la fonctionnalité de sql dynamique de BO, avec tous les inconvénients que cela engendre : maintenance difficile, désynchronisation de la requête avec l’univers. - modifier la propriété hint de la connexion.
Mais toutes les requêtes seront impactées, ou il faut créer une nouvelle connexion. - créer un nouvel objet
Cette dernière solution est à privilégier.
Il suffit de créer un objet technique pointant sur une constante ( 0, 1 ou NULL ), à mettre en 1ère position dans l’éditeur de requête.
La formule de l’objet est
/*+ FULL(SALES) */ 0
Et on le définit sur la table SALES ( bouton Tables … ) pour éviter les alertes lors de la vérification de l’intégrité de l’univers.