Si vous utilisez déjà Analytics (ROW_NUMBER() OVER ...
) puis ajouter une autre fonction analytique sur le même partitionnement ajoutera un coût négligeable à la requête.
D'autre part, il existe de nombreuses autres façons de faire la pagination, l'une d'entre elles utilisant rownum
:
SELECT *
FROM (SELECT A.*, rownum rn
FROM (SELECT *
FROM your_table
ORDER BY col) A
WHERE rownum <= :Y)
WHERE rn >= :X
Cette méthode sera supérieure si vous avez un index approprié sur la colonne de commande. Dans ce cas, il peut être plus efficace d'utiliser deux requêtes (une pour le nombre total de lignes, une pour le résultat).
Les deux méthodes sont appropriées, mais en général, si vous souhaitez à la fois le nombre de lignes et un ensemble de pagination, l'utilisation d'analyses est plus efficace car vous n'interrogez les lignes qu'une seule fois.