Dans le cadre d’une gestion en liste paginée et triable, on est tenté d’utiliser la fonctionnalité ROWNUM pour la pagination (c’est à dire les n premiers résultats) et le ORDER BY pour le tri, sauf que sous ORACLE, le ORDER BY s’applique après le ROWNUM, donc si vous trier par nom les 25 premiers résultats d’une liste de 1000 noms, vous aurez en première page, les 25 premiers résultats de la requete non trié (c’est à dire un échantillon de A à Z) trié par nom…
Pour éviter ça, il faut encapsuler la première requète dans une deuxième :
SELECT * FROM
(SELECT champs FROM table ORDER BY champ_a_trier)
WHERE ROWNUM < 25;
Sources : http://archives.postgresql.org/pgsql-general/2001-07/msg01243.php
je me demande si ça n’a pas un impact sur les performances dans le cas où on a un très grand nombre de lignes dans la table