View1 EST:Comment puis-je utiliser Oracle pour utiliser des index lorsque ma vue contient UNION ALL?
SELECT A, B, C FROM view2
UNION ALL
SELECT A, B, C FROM view3
INNER JOIN TBL5 ON view3.CODE = TBL5.CODE
colonne C est indexé dans les tables source, et quand j'exécute une ou l'autre des instructions select individuellement, il utilise l'index et revient en un éclair. Lorsque j'utilise la vue, elle expire. J'avais l'impression qu'Oracle réécrivait les requêtes sur les vues et utilisait les index là où c'était utile plutôt que de faire un SELECT * FROM VIEW1
puis d'appliquer les prédicats après le fait.
Qu'est-ce que je fais mal? Les exemples de vues ci-dessus éclairent le problème, mais mes vues réelles rejoignent des douzaines de tables pour qu'une vue soit vraiment nécessaire.
La colonne "CODE" est-elle la colonne indexée? Vous dites "Colonne C". P.S. http://asktom.oracle.com/pls/asktom/f?p=100:11:0::NO::P11_QUESTION_ID:625452100346586215 – Tim
@Tim: Oui, il existe aussi un index sur CODE. view2, view3 et la deuxième partie de ce UNION ALL sont tous optimisés et fonctionnent bien avec mes requêtes, mais quand je interroge cette vue elle-même les choses tombent en panne. –
Je pense que nous aurions besoin de voir les plans d'exécution pour cette requête, et pour les deux parties exécutées séparément, afin de fournir des conseils vraiment utiles. –