Oracle
 sql >> Base de données >  >> RDS >> Oracle

Quand un SQL correct donnera-t-il un mauvais résultat

Une chose que vous pouvez faire est d'appliquer l'indicateur NO_QUERY_TRANSFORMATION introduit dans Oracle 10g.

Si cela donne le résultat souhaité, vous savez que vous êtes confronté à un bogue Oracle, car aucun indice ne devrait modifier le résultat réel d'une requête.

En même temps, vous avez peut-être résolu votre problème, sauf que votre plan d'exécution ne sera peut-être pas satisfaisant.

Le bogue auquel vous êtes confronté (je ne sais pas s'il s'agit d'un bogue connu) est que l'optimiseur Oracle peut ne pas interpréter correctement l'intention de la requête d'origine lors de la transformation de la requête pour un meilleur plan d'exécution (vues de fusion, etc.). En utilisant l'indice, vous indiquez à l'optimiseur de ne pas le faire.

Le phénomène est le plus souvent observé avec des requêtes complexes impliquant des vues de performances en ligne.

Actuellement, je n'ai pas d'exemples de code pour reproduire ce problème mais j'y travaille.

MISE À JOUR :Il semble que c'est en fait ce à quoi l'indice est destiné - j'ai trouvé ceci :

doumentation .