Jeśli korzystasz już z analityki (ROW_NUMBER() OVER ...
), a następnie dodanie kolejnej funkcji analitycznej na tym samym partycjonowaniu spowoduje znikomy koszt zapytania.
Z drugiej strony istnieje wiele innych sposobów na paginację, jeden z nich przy użyciu rownum
:
SELECT *
FROM (SELECT A.*, rownum rn
FROM (SELECT *
FROM your_table
ORDER BY col) A
WHERE rownum <= :Y)
WHERE rn >= :X
Ta metoda będzie lepsza, jeśli masz odpowiedni indeks w kolumnie zamawiania. W takim przypadku bardziej efektywne może być użycie dwóch zapytań (jednego dla łącznej liczby wierszy, drugiego dla wyniku).
Obie metody są odpowiednie, ale ogólnie, jeśli chcesz mieć zarówno liczbę wierszy, jak i zestaw stronicowania, użycie analityki jest bardziej wydajne, ponieważ zapytanie o wiersze jest wykonywane tylko raz.