|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre du Club
![]() Étudiant Inscription : avril 2007 Messages : 165 ![]() |
Bonjour!
je me trouve face au beosins d'appeler une fonction dans une close where, genre: Code :
... ça m'apparait pas tres optimisé comme code... alors votre avis !!? Merci par avance. PMS |
||
|
|
00
|
|
|
#2 |
|
Membre éprouvé
![]() Inscription : décembre 2007 Messages : 354 ![]() |
Il est impossible de se prononcer dans l'absolue de cette façon ...
Dans certains cas, il est effectivement possible d'écrire la requête sans faire recours à la fonction et il est concevable dans ce cas de considérer la fonction comme une mauvaise solution. Il ne faut pas oublier non plus que les index basés sur des fonctions permettent de booster la perforlance ... |
|
|
00
|
|
|
#3 | |
|
Membre du Club
![]() Étudiant Inscription : avril 2007 Messages : 165 ![]() |
Citation:
malheureusement je suis face à un cas où je n'ai pas de choix autre qu'une fonction... Sauf que: 1- soit je crée une table d'une seule colonne 2- faire une table function... et donc faire des selects directement sur la fonction.... je sais que c'est faisable..; mais comment? |
|
|
|
00
|
|
|
#4 | ||||
|
Membre éprouvé
![]() Inscription : décembre 2007 Messages : 354 ![]() |
Code :
Créer un index basé sur la fonction. En gros Code :
|
||||
|
|
00
|
|
|
#5 | ||
|
Membre Expert
![]() Expert Datawarehouses + BO (sur BDD Oracle et SQL Server) Inscription : mars 2003 Messages : 645 ![]() |
Pour privilégier des étapes bien séparées , je proposerais aussi la requête ci-dessous, à comparer avec la solution d'un index sur la fonction. (Mais c'est vrai qu'il vaut mieux éviter les jointures sur les fonctions en générale bien que les index sur fonctions existent depuis un certain nombre de version d'Oracle).
Code :
Comme ça, cela exécute la fonction pour chaque ligne lors du sous-SELECT, mais lors de la jointure le résultat de la fonction a déjà été calculée dans la sous-requête. |
||
|
|
00
|
|
|
#6 | |||
|
Membre éprouvé
![]() Inscription : décembre 2007 Messages : 354 ![]() |
Citation:
|
|||
|
|
00
|
|
|
#7 |
|
Membre Expert
![]() Expert Datawarehouses + BO (sur BDD Oracle et SQL Server) Inscription : mars 2003 Messages : 645 ![]() |
Je ne remets pas en cause ta solution qui est la meilleure si l'index sur la fonction est performant. Je propose simplement une alternative qui fonctionne pas trop mal si la création de l'index n'est pas possible ou non performant(= non discriminant par exemple).
|
|
|
00
|
|
|
#8 |
|
Membre éprouvé
![]() Inscription : décembre 2007 Messages : 354 ![]() |
En fait et indépendamment de l'index basé sur la fonction, ce que je voulais dire que le calcul de la fonction dans ta requête n'est pas assuré de la façon que tu propose vu qu'Oracle peut faire la fusion d'une vue (requête imbriquée) dans la requête principale et alors il est nécessaire d'utiliser des hints ...
|
|
|
00
|
|
|
#9 |
|
Membre Expert
![]() Expert Datawarehouses + BO (sur BDD Oracle et SQL Server) Inscription : mars 2003 Messages : 645 ![]() |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com