2 votes

PL/SQL FETCH NEXT ou rownum

Il n'y a pas grand-chose à développer, qu'est-ce qu'il faut utiliser ? Ils semblent effectuer la même tâche.

rownum ?

select * from IDENTIFIKATOR
  where rownum <= 10;

ou de la prise en charge suivante ?

select * from IDENTIFIKATOR
  FETCH NEXT 10 ROWS ONLY;

Après mûre réflexion, le rownum peut sembler plus rapide à première vue.

select * from (select * from IDENTIFIKATOR order by IDENTIFIKATORID )
  where rownum <= 10;  

a une cardinalité de 10 et un coût de 10 (temps d'exécution simple de 0.15-0.2s (asc vs desc))

select * from IDENTIFIKATOR 
order by IDENTIFIKATORID 
FETCH NEXT 10 ROWS ONLY;

a une cardinalité de 10 et un coût de 158869 (temps d'exécution simple de 1.9s-2s(asc vs desc))

3voto

Gordon Linoff Points 213350

Si vous utilisez Oracle 12c+, je vous suggère de vous habituer à l'option FETCH clause. Il s'agit d'une syntaxe conforme à la norme ANSI et disponible dans d'autres bases de données. De plus, elle est plus souple. Par exemple, vous pouvez faire :

select i.*
from IDENTIFIKATOR i
order by col2 desc
fetch first 10 rows only;

De plus, il soutient la OFFSET modificateur.

Pour ce faire, il faut utiliser rownum nécessite une sous-requête.

En revanche, si votre code doit fonctionner avec des versions antérieures d'Oracle, alors rownum est votre seul choix.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X