J'ai une vue qui renvoie une liste de projets pour les clients et pour les fournisseurs. Fondamentalement, j'utilise cette vue pour aller chercher la liste des projets pour un client ou un fournisseur, jamais les deux en même temps. Ainsi, la vue est interrogé soit comme:Requête de branchement SQL avec union tout - performance
ou
SELECT * FROM projects_list
WHERE vendor_id = 'A_VENDOR';
Alors basiquement je voudrais exécuter soit la première partie de l'union s'il n'y a pas de jeu de vendor_id ou deuxième partie - si Vendor_id est défini. Le problème est que lorsque j'accède à la vue en tant que client, Oracle passe beaucoup de temps à vérifier le "fournisseur Branck" quand il n'est pas nécessaire, et la requête est lente. Je peux maintenant scinder cette vue en deux et choisir une vue différente à chaque fois. Mais en réalité, j'ai beaucoup de points de vue sur celui-ci et je n'accède pas directement à celui-ci. Je devrais dupliquer chacune des vues "enfant" et faire de nombreux changements dans le code de l'application pour effectuer cette modification.
Y a-t-il un moyen de "faire allusion" à l'oracle pour ignorer la première ou la deuxième branche de l'union?
Vous souhaitez peut-être envisager de nommer explicitement vos colonnes de sélection. Une fois que vous avez fait cela, essayez d'ajouter une colonne de constante supplémentaire à chacune de vos unions, c'est-à-dire 'V' et 'C', puis sélectionnez explicitement cela - cela vous aide-t-il? –
Il semble que oui, merci – SWilk
Je vais coller comme une réponse –