Différence d'exécution entre un max et un row_number
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:
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:
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:
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 ?