Bonjour,


Je viens de m'essayer à une petite requète, j'ai testé de ramener mes lignes en utilisant une fonction max et une fonction row_number....
mais je trouve que le temps d'exécution n'est pas du tout le même.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
select * from (
   select cv_con_number, 
          cv_number, 
          row_number() over (partition by cv_con_number order by cv_number desc) as FL_ROW, CV_STATUS_CODE
   from CONTRACT_VERSIONS
) where FL_ROW = 1
--Environ 40 s

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
select * from (
   select cv_con_number, 
          cv_number, 
          max(cv_number) over (partition by cv_con_number) as max_cv_number, CV_STATUS_CODE
   from CONTRACT_VERSIONS
) where max_cv_number = cv_number
--Environ 15 s


Mes résultats sont identiques en terme de volumétrie. Mais j'aurais voulu avoir une explication sur le temps de traitement, est ce que l'une des fonctions est plus performante que l'autre, est ce que ca depend de la volumétrie, ou de certaines autres conditions ?

C'est pas vraiment un problème que je pose, je voudrais juste savoir aupres des experts en architecture oracle s'ils ont un moyen d'expliquer cela pour ma culture générale

Un grand merci d'avance à ceux qui se pencheront sur le sujet.






Ha, et autre chose aussi :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
select * 
from CONTRACT_VERSIONS A
where A.cv_number = (   select max(B.cv_number)
                        from CONTRACT_VERSIONS B 
                        where A.cv_con_number = B.cv_con_number
                        )
Les fonctions analytiques ou cette jointure, lequel est le mieux en oracle ?